2010-11-23 16 views
2

Ich muss eine DLL innerhalb einer anderen DLL (Visual C++ beide) laden, damit ich die Klassen in der ersten in der zweiten eingebettet verwenden kann. Ich habe den Code von beiden, da ich beide DLLs erstellt habe, aber ich habe nie dynamisch eine Bibliothek geladen, also bin ich mir nicht sicher, wie das gemacht wird ...Dynamisch Laden einer DLL innerhalb einer anderen DLL

Außerdem möchte ich diese Multi-Plattform machen, die ich bereits als .dll und .so kompiliert, so wäre es eine plattformunabhängige Methode, dies zu tun ... sonst kann ich Makros verwenden, um Windows oder Linux spezifischen Code einzuschließen.

Mit freundlichen Grüßen und vielen Dank

Antwort

0

Regel nur kompilieren und die untersten Ebene DLL verknüpfen. Das wird die DLL selbst und eine LIB-Datei erstellen. Kompilieren und verknüpfen Sie die nächste DLL über die Kette und verknüpfen Sie sie mit dieser .LIB-Datei. Gehen Sie die Kette weiter, bis Sie die .EXE erreichen, mit der (normalerweise) nichts verbunden ist.

+0

Okie dokie, tun, danke für die schnelle Antwort – Alex

1

Die Funktionen zum dynamischen Laden der Bibliothek sind: LoadLibrary (Windows), dlopen (Linux). Um die Symbole zu bekommen: GetProcAddress (Windows), dlsym (LInux). Schließen Sie die Open Library: FreeLibrary (Windows), dlclose (Linux). Es gibt einen Artikel darüber, wie Klassen dynamisch in Windows geladen werden: http://www.codeproject.com/KB/DLL/classesexportedusingLL.aspx und Linux: http://www.linuxjournal.com/article/3687?page=0,0. Und es gibt Code, um die Bibliotheken dynamisch unter Windows und Linux zu laden: http://www.sview.ru/sources/libexample/loadLibrary.h. Ich hoffe, das könnte dir helfen.

Es gibt zusätzliche Informationen über die Belastungsklassen dynamisch auf Windows und Linux:

http://www.codeguru.com/cpp/w-p/win32/article.php/c1443 (Windows). http://www.faqs.org/docs/Linux-mini/C++-dlopen.html#loadingclasses (Linux).

+0

Wow, tolle Artikel, vielen Dank! – Alex