2009-07-30 7 views
3

Beim Erstellen einer DLL mit Visual C++ 2008 habe ich ein paar Möglichkeiten. Ich kann eine "Class Library" erstellen, die ich verstehe, wird mir tatsächlich eine .Net-Bibliothek geben, die die CLI (verwalteten) Erweiterung von C++ verwendet.Unmanaged Klassen aus einer Visual C++ DLL exportieren?

Da ich das nicht möchte, und ich nehme an, dass ich eine statische .LIB-Datei zum Verknüpfen mit einem anderen ausführbaren Visual C++ - Windows-Projekt benötigen, wähle ich stattdessen "Win32-Projekt" und geben Sie im Fenster Anwendungseinstellungen ein C++ (keine MFC) DLL.

Dies wird ein Projekt mit einer CPP-Datei erstellen, die ich sein soll, wo ich "die exportierten Funktionen für die DLL-Anwendung" definieren.

Das scheint nicht das zu sein, was ich auch will. Im Grunde ist das, was ich suche, das native C++ - Äquivalent dessen, was in C# .NET eine Klassenbibliotheksbaugruppe wäre. Ich möchte einige Klassen in eine DLL packen, dann ein .EXE-Projekt verwenden Sie die DLL-Klassen, indem Sie die DLL-Projekt-Header-Dateien und Link mit einer .LIB, um Referenzen zu lösen.

Was ist der übliche Weg, dies zu tun?

Antwort

4

Sie machen es richtig. Was Sie brauchen, ist Ihre Klassen mit __declspec(dllexport) zu markieren, um sie von außerhalb des Projekts verfügbar zu machen. Wenn Sie das Projekt erstellen, generieren Sie sowohl eine .DLL als auch eine .LIB.

+0

Großartig. Und eine ähnliche Vorgehensweise auf der anderen Seite zu importieren? – Buggieboy

+0

Schauen Sie sich an, was der automatisch generierte Code macht. Das Makro dilexport/import basiert auf einer Precompiler-Direktive, so dass der Konsument nicht über Import und Export nachdenken muss. – ctacke

+0

Siehe meine Antwort hier für eine Ausarbeitung darüber, worüber ctacke spricht (http://stackoverflow.com/questions/1179103/visual-studio-2005-linker-problem/1179118#1179118) –

1
  • Erstellen Sie ein neues Projekt
  • Visual C++: Win32: Win32-Projekt
  • Anwendungseinstellungen wählen DLL und überprüfen ‚Symbole exportieren“

Wenn Sie das Projekt generieren, wird es Stummel ein heraus exportierte Klasse für Sie, normalerweise mit dem Namen C {MyLib}

1

Sie haben Recht, eine C++ - DLL (keine MFC) zu erstellen Sie können Ihre Klassen erstellen und die von Ihnen definierten Einstiegspunkte werden aus diesem DL exportiert L für die Verwendung durch anderen C++ - Code (z. B. eine in C++ geschriebene Win32-Anwendung).

Da C++ - Namen automatisch vom Compiler zu merkwürdigen und wunderbaren Werten gemangelt werden, ist es nicht praktisch, sie so zu exportieren, als wären die Clients der DLL beispielsweise C-Programme. Aber wenn alles in C++ ist, sollten Sie in Ordnung sein.

Wenn Sie einige Klassen erstellen, können Sie sie dynamisch verknüpfen lassen (als DLL), aber Sie benötigen eine (für Sie automatisch erstellte) Importbibliothek, die die Symboldefinitionen der DLL enthält. Sie können auch festlegen, dass der Code statisch mit Ihrem Code aus einer Anwendung verknüpft wird. In diesem Fall erhalten Sie eine statische Bibliothek (auch eine .LIB), die den tatsächlichen Objektcode in Ihren Klassen anstelle von Symbolen in einer DLL enthält.

Der Vorteil einer DLL ist natürlich, dass, wenn Sie mehrere Anwendungen mit Ihrer Bibliothek schreiben, sie alle die DLL teilen können; Mit einer statischen Bibliothek enthalten sie jeweils eine Kopie Ihres Bibliothekscodes.

1

Ich denke, dieser Artikel beschreibt, was Sie zu tun versuchen: http://www.codeproject.com/KB/mcpp/usingcppdll.aspx

persönlich Export ziehe ich auch C-Funktionen (im Gegensatz zu C Gegensatz ++), wo ich die dieser Zeiger explizit zu machen, um zu vermeiden über Compiler spezifischen Pflege Method Name Dekoration und Exposing Compiler generierte Funktionen.