Ich habe noch nie eine DLL benutzt, bevor ich mit ihr so nackt war ...
Ich musste meinem Projekt eine Bibliothek eines Drittanbieters hinzufügen und sie liefern nur eine DLL-Datei (keine .lib)
Ich habe die DLL zum Projekt hinzugefügt, indem ich auf die Property-Seite des Projekts unter Allgemeine Eigenschaften - & gt; Referenzen - & gt; Neue Referenz hinzufügen
Ich kann die DLL unter dem Ordner "Externe Abhängigkeiten" im Projektmappen-Explorer sehen, also denke ich, dass sie korrekt aufgenommen wurde.
Aber wie referenziere ich die DLL? Wenn ich versuche, eine Instanzvariable (z. B. MCC :: iPort :: ASCII iPort) hinzuzufügen, um auf die DLL-Klasse zuzugreifen, erhalte ich den Fehler: Name gefolgt von '::' muss ein Klassen- oder Namensraumname sein, aber ich weiß das der Klassenname kann ich in der DLL-Info unter Externe Abhängigkeiten sehen.
Die einzige Möglichkeit, auf eine leere DLL ohne eine .lib-Datei zuzugreifen, besteht darin, die DLL explizit mit LoadLibrary()
, erhalten Sie Zeiger auf die exportierten Funktionen, auf die Sie zugreifen möchten mit GetProcAddress()
und dann diese Zeiger auf die richtige Funktionssignatur anwenden. Wenn die Bibliothek C ++ - Funktionen exportiert, werden die Namen, die Sie an GetProcAddress()
übergeben müssen, fehlerhaft sein. Sie können die exportierten Namen mit dumpbin /exports your.dll
auflisten.
Wie von anderen bemerkt wurde, kann eine LIB-Datei erstellt werden. Holen Sie sich die Liste der exportierten Funktionen aus dumpbin /exports your.dll
:
Geben Sie die Namen in eine DEF-Datei ein:
%Vor%Machen Sie nun die LIB-Datei:
%Vor% Für Fälle, in denen der Name entweder durch C ++ name mangling oder 32-bit stdcall
Aufrufkonvention geschmückt wurde, kopieren und fügen Sie einfach die Namen dumpbin
mapped, mangling und all.
Wenn Sie keine .lib
Datei haben, können Sie eine aus der .dll
erstellen:
Ich hoffe, das hilft.
Tags und Links c++ dll visual-studio-2013