Zwei DLLs, die sich gegenseitig aufrufen
-
Hallo,
ich habe hier u.a. zwei DLLs. Die eine soll dabei Funktionen der jeweils anderen aufrufen. Kompiliert werden sie natürlich nacheinander.
Der Zugriff von der Zweiten auf die Erste funktioniert.
Den Zugriff von der Ersten auf die Zweite mache ich momentan, indem ich die entsprechende Header-Datei includiere und ein Objekt der Klasse erstelle.
Das verursacht jedoch den Fehler
error LNK2001: Nichtaufgeloestes externes Symbol
Danach steht noch eine kryptische Zeichenfolge, die anscheinend zum Konstruktor der aufgerufenen Klasse in der zweiten DLL gehört. Diese Zeichenfolge ist auch in der *.def Datei der zweiten DLL eingetragen.Ich nehme mal an, dass das daran liegt, dass beim Kompilieren der ersten DLL noch nichs von der zweiten vorhanden ist...
Es wäre prima, wenn mir jemand verraten könnte, was man machen muss, damit das trotzdem funktioniert.
Vielen Dank dafür schon mal im voraus.
-
Ich würde mal sagen: Du hast ein Design-Problem.
Entweder stelle ein Callback-Machanismus zur Verfügung oder überdenke das ganze mal komplett.
-
Das Programm an sich ist schon sehr alt.
In der ersten DLL sind sozusagen die Grund- und Stammdaten (gibt es schon ewig).
In der zweiten ist durch neue Gesetzgebung alles für Internetzugriff dazugekommen.Von der zweiten DLL die Stammdaten abholen und verarbeiten geht.
Jetzt sollen sich aber z.B. Adressen (aus den Stammdaten, erste DLL) selbst über das Internet registrieren (zweite DLL).
Komplett überdenken ist da wohl nicht mehr drinn...
-
Ich noch mal...
Mit diesem Callback-Mechanismus kenne ich mich nicht aus.
Wäre das hier ein analoges Beispiel, wie ich vorgehen könnte?http://www.codeguru.com/cpp/cpp/cpp_mfc/callbacks/article.php/c10557
[edit]
Mmmmhh, weiter unten gehts wohl eher in die richtige Richtung, oder?
Bei: "C++ Methods as Callback Functions"
[/edit]
-
Wenn sie sich gegenseitig direkt benötigen durch implizites Laden, dann brauchst Du keine 2 DLLs. Schmeiß den gesamten Code in eine DLL.
-
In der zweiten Internet-DLL wird eine Middleware gekapselt.
Middleware von anderen Herstellern soll mal durch Austausch dieser DLL möglich sein, kann man also auch nicht so einfach zusammen packen...
-
Das funktioniert doch auch dan nicht, wenn Du die DLL implizit bindest!
Dann kann man side doch gar nicht tauschen...Greife zu Jochens Vorschlag: Callback.
Das geht ganz einfach, wenn Du zum Beispiel eine Interface erzegst (pure virtual class) und einen Zeiger auf solch eine Instanz dann einfach an die Wrapper-DLL übergibst. Diese kann dann dieses Interface benutzen um sich auszutauschen mit der anderen DLL.
Beide sind voneinander unabhängig. Die Wrapper-DLL kennt nur das Interface, die andere DLL kenn nur die Funktionen der Wrapper DLL (evtl. auch ein Interface) + eine Funktion i.e. SetCallbackInterface.
-
"Ganz einfach" klingt das für mich zwar nicht, werde ich aber mal versuchen.
...müssen...
Danke noch mal.