Frage

Wenn Sie eine DLL mit Visual C ++ 2008 zu schaffen habe ich ein paar Möglichkeiten. Ich kann eine „Klassenbibliothek“ erstellen , die ich verstehe mir eigentlich eine .NET-Bibliothek geben, die die CLI (verwaltet) extenstion von C ++ verwendet.

Da ich will das nicht, und ich nahm an, dass ich eine statische LIB-Datei in ein anderes Visual C zu verknüpfen ++ ausführbare Windows-Projekt, wähle ich statt „Win32-Projekt“ und auf dem Panel Anwendungseinstellungen, eine C ++ angeben (kein MFC) DLL.

Das wird ein Projekt mit einer CPP-Datei erstellen, die angeblich sein, wo ich „um die exportierten Funktionen für die DLL-Anwendung“ definieren .

Dies scheint nicht zu sein, was ich entweder will. Im Grunde, was ich suche ist die native C ++ entspricht dem, was wäre, in C # .NET eine Klassenbibliothek Versammlung sein. Ich mag einige Klassen in eine DLL verpacken, dann ein Exe-Projekt die Klassen DLL verwenden , indem Sie die DLL-Projekt-Header-Dateien, einschließlich und Verknüpfung mit einem LIB-Verweise aufzulösen.

Was ist der üblicher Weg, dies zu tun?

War es hilfreich?

Lösung

Du machst es richtig. Was Sie brauchen, ist Ihre Klassen markieren mit __declspec (dllexport) , um sie von außerhalb des Projektes zur Verfügung zu stellen. Wenn Sie das Projekt erstellen, werden Sie erzeugen sowohl eine DLL und LIB.

Andere Tipps

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

Wenn Sie das Projekt generieren, wird es eine exportierte Klasse für Sie Stub, in der Regel dem Namen C {MyLib}.

Sie haben Recht, eine C ++ (ohne MFC) DLL zu machen. Sie können Ihre Klassen und diese Einstiegspunkte erstellen, die Sie von dieser DLL für die Verwendung durch andere C ++ Code (zum Beispiel einer Win32-Anwendung geschrieben in C ++).

exportiert werden definieren

Da C ++ Namen durch den Compiler zu seltsamen und wunderbaren Werten automatisch verstümmelt bekommen, dann ist es nicht sinnvoll, sie zu exportieren, als ob die Kunden der DLL ist, sind zum Beispiel C-Programme. Aber wenn alles in C ++ ist, sollten Sie in Ordnung sein.

Wenn Sie einige Klassen erstellen, können Sie wählen, um sie dynamisch verknüpft haben (als DLL), aber Sie werden eine Importbibliothek benötigen (erstellt für Sie automatisch), die die Symboldefinitionen DLL enthält. Sie können auch statisch, um Ihren Code aus einer Anwendung heraus wählen zu verbinden - in diesem Fall würden Sie mit einer statischen Bibliothek (auch ein LIB), den Code in Ihren Klassen enthält den eigentlichen Objekt am Ende eher als Symbole in einer DLL

Der Vorteil einer DLL ist natürlich, dass, wenn Sie mehrere Anwendungen mit Ihrer Bibliothek zu schreiben, können sie alle DLL teilen; mit einer statischen Bibliothek, würden sie enthalten jeweils eine Kopie Ihrer Bibliothek Code.

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

Persönlich ziehe ich es auch C-Funktionen zu exportieren (im Gegensatz zu C Gegensatz ++), wo ich die dieser Zeiger explizit zu machen, um zu vermeiden über Compiler spezifische Methodennamen Dekoration und das Aussetzen Compiler erzeugte Funktionen sorgen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top