Ich habe eine zirkuläre Abhängigkeit zwischen zwei Funktionen. Ich möchte, dass jede dieser Funktionen in einer eigenen DLL untergebracht ist. Ist es möglich, dies mit Visual Studio zu bauen?
foo(int i)
{
if (i > 0)
bar(i -i);
}
-> sollte zu foo.dll kompiliert werden
bar(int i)
{
if (i > 0)
foo(i - i);
}
-> sollte in bar.dll kompiliert werden
Ich habe zwei Projekte in Visual Studio erstellt, eines für foo und eines für bar. Indem ich mit den "Referenzen" spielte und ein paar Mal kompilierte, gelang es mir, die gewünschten DLLs zu erhalten. Ich würde jedoch gerne wissen, ob Visual Studio eine Möglichkeit bietet, dies auf saubere Weise zu tun.
Wenn sich foo ändert, muss bar nicht neu kompiliert werden, weil ich nur von der Signatur von bar abhänge, nicht von der Implementierung von bar. Wenn die Lib in beiden DLLs vorhanden ist, kann ich neue Funktionen in eine der beiden neu kompilieren, und das ganze System funktioniert weiterhin.
Der Grund, warum ich dies versuche, ist, dass ich ein Legacy-System mit zirkulären Abhängigkeiten habe, das derzeit statisch verknüpft ist. Wir wollen aus verschiedenen Gründen auf DLLs umsteigen. Wir wollen nicht warten, bis wir alle zirkulären Abhängigkeiten bereinigt haben. Ich habe über Lösungen nachgedacht und einige Dinge mit gcc unter Linux ausprobiert, und dort ist es möglich, das zu tun, was ich vorschlage. Man kann also zwei gemeinsam genutzte Bibliotheken haben, die voneinander abhängen und unabhängig voneinander gebaut werden können.
Ich weiß, dass zirkuläre Abhängigkeiten keine gute Sache sind, aber das ist nicht die Diskussion, die ich führen möchte.
0 Stimmen
Eine sehr interessante Frage. Ich weiß, etwas kann wie dies möglich ist, aber ich weiß nicht wirklich, wie - ich denke, es beinhaltet einige spezielle Befehlszeilen-Parameter an den Linker von EINER der dll's und die andere dll sollte eine einfache Abhängigkeit haben.
0 Stimmen
@PM: Wenn das der Fall ist, dann ist es die Art von Sache, die ein ständiges Problem sein wird, das vergessen wird, falsch konfiguriert wird, etc.