32-Bit-Importbibliotheken ohne .OBJs oder Datenquelle erstellen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 131313 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Erläutert, wie zum Erstellen einer Import Bibliothek erhalten eine DLL für die Sie keine Source Code oder das Objekt Module verfügen. Befindet sich keine 32-Bit-Hilfsprogramm, die ein Bibliothek importieren aus einer DLL erstellen können wie es mit 16-Bit-Versionen von Visual C++ war.

Hinweis : Diese Methode funktioniert möglicherweise nicht mit DLLs mit nicht-Microsoft-Entwicklungstools generiert.

Weitere Informationen

Normalerweise ist beim Erstellen einer DLL oder jedes Ziel, die exportiert Funktionen oder Datenelemente, eine Import-Bibliothek (und exportiert-Datei) als Teil der Verknüpfungsvorgang generiert. Aber im Fall von einem Fremdanbieter-DLL, der nicht mit einer Bibliothek importieren ausgeliefert wird, müssen Sie möglicherweise eine Import-Bibliothek generieren, um die DLL erfolgreich mit Load-Time dynamic linking zu verwenden. Eine Import-Bibliothek ist für die Run-Time dynamic linking nicht erforderlich.

Es gibt zwei Möglichkeiten, ein Import Bibliothek erhalten eine DLL zu erstellen:
  • Erstellen Sie eine DEF-Datei für die Verwendung mit der LIB/DEF: Befehl.
  • Stub Funktionen und die .OBJ-Dateien erstellt, um die Import-Export-Beziehungen zu imitieren. Verwenden Sie dann die LIB/DEF: Befehl Import Bibliothek erstellen.

Erstellen einer DEF-Datei

Nur dann können Sie eine DEF-Datei ein Bibliothek importieren aus einer DLL erstellen für die Sie nicht den Quellcode besitzen oder Objektmodule-ist, wenn die DLL-Funktionen über eine C-Schnittstelle exportiert. Insbesondere müssen die Funktionen die C-Aufrufkonvention verwenden deklariert wurden. Dies wird durch das normalerweise für die Funktion im Prototyp verwendet _cdecl-Attribut angegeben. Beachten Sie, dass wenn kein Attribut angegeben ist, _cdecl die Standardeinstellung ist beim/Gz (_stdcall ist die Standardeinstellung) oder/GR (_fastcall ist die Standardeinstellung) ist nicht in der CL-Befehlszeile angegeben. Der Grund für diese Einschränkung basiert auf einer Annahme wird die LIB-Dienstprogramm, dass alle Namen automatisch ohne einem führenden Unterstrich exportiert werden. Dies gilt nur für _cdecl-Funktionsnamen.

Eine DLL mit Funktionen, die über eine C-Schnittstelle exportiert erteilt, können Sie eine Import-Bibliothek erstellen, gehen Sie folgendermaßen vor:
  1. Verwenden Sie DUMPBIN/Exports < dll-dateiname >, um die Liste der exportierten Symbole für die der fraglichen DLL zu erhalten. Die Symbole angezeigt, in der Spalte "Name" der Tabelle, deren Überschriften "ordinal Hinweis Name." sind
  2. Erstellen Sie eine .DEF-Datei, die einen EXPORTS-Abschnitt mit den Namen der in der Spalte "Name", der die DUMPBIN-Ausgabe aufgelisteten Funktionen enthält.
  3. Für _cdecl-Funktionen wird das Symbol angezeigt, genauso wie wenn Sie in das aufrufende Programm verwendet. EXPORTS-Abschnitt der DEF-Datei einfach versehen Sie dieses Symbol.
  4. Verwenden Sie LIB/DEF: < def-dateiname > zum Generieren des Imports Bibliothek und Exportdatei. Der Basisname der Import-Bibliothek wird der Basisname der DEF-Datei sein. Verwenden Sie/OUT: Der Ausgabename Bibliothek zu steuern.

Stubbing aus Funktionen

Bei exportierten Funktionen, die Aufrufkonventionen als auf C verwenden, ist die Situation ein wenig komplexer. Dies gilt vor allem wenn Sie C++-Funktionen und die komplexeren Namen Dekoration Schemas beteiligten berücksichtigen. Diese Methode verwenden, müssen Sie mindestens die Headerdatei verfügen, die die DLL-Schnittstelle beschreibt.

Um gekürzte Funktionen von Prototypen in einer Headerdatei zu erstellen:
  1. Wenn "__declspec(dllimport)" in einem Prototyp oder Deklaration verwendet wird, ändern Sie auf "__declspec(dllexport)."
  2. Für Funktionen, die keinen Wert für C-Funktionen in C Datenquelle zurückgeben und C-Funktionen in C++-Quellcode (verwendet mit dem Konstrukt "Extern"C""), ersetzen Sie das Semikolon beendet, den Funktionsprototyp mit einem übereinstimmenden geschweiften Klammern ("{}")-Paar.
  3. Für C++-Funktionen (global oder Member), die einen Wert zurückgeben, müssen Sie erstellen einen dummy Rumpf für die Funktion und dummy Rückgabewert mit dem richtigen Typ. (Nicht in der Funktion über eine return-Anweisung ist ungültig). Dies gilt für Memberfunktionen, wie gut. Bedenken Sie, die der Zweck dieses Verfahrens besteht darin, täuschen LIB-Dienstprogramm in Bibliothek korrekt importieren generieren, damit diese dummy keine Auswirkungen Textteile.
  4. C++-Klassen können Sie die stub mithilfe der Prototypen in der Klassendeklaration Member-Funktionen, solange Sie Inlinefunktionen deaktivieren, wenn Sie kompilieren.
  5. Nach Typ in einer Headerdatei sind i. d. r. nur Funktionsargumente angegeben. Beispielsweise Geta(int). Ein dummy Argumentbezeichner muss angegeben werden, wenn dummy Funktionsrumpf Geta(int x) hinzufügen. Andernfalls der Fehler C2055 generiert wird.

Beispiel

Wenn die Headerdatei, die MYDLL.DLL beschreibt aussieht:
// mydll.H

extern "C" __declspec(dllimport) void _stdcall Function(void);

class __declspec(dllimport) CMyClass {
     int a;
     long b;
public:
     int Geta(int);
     long Getb();
     CMyClass();
};
				
die dummy Quelldatei erstellen Sie die Import-Bibliothek sollte wie folgt aussehen:
 // mydll.CPP

 extern "C" __declspec(dllexport) void _stdcall Function(void) {}

 class __declspec(dllexport) CMyClass {
      int a;
      long b;
 public:
      int Geta(int x) {return 111;}
      long Getb() {return 111;}
      CMyClass() {}
 };
				
nach die Funktionen Stub sind, ist dazu müssen Kompilieren die Quelldatei in eine .obj-Datei:
CL/c /Ob0 mydll.CPP
Hinweis: Deaktivieren von Inlinefunktionen ist erforderlich, Erzwingen der Generierung von Symbolen für die Funktionen in CMyClass definiert wird. Wenn Inlinefunktionen aktiviert wurden, würde der Compiler feststellen, dass keine Verweise auf die Memberfunktionen in der Übersetzungseinheit damit es die Funktionstext verwerfen möchten. Finden Sie die Diskussion auf Inlinefunktionserweiterung unter Optimierungen in der Zeile Referenz zu Visual C++ CL-Befehl.

Sobald Sie .OBJ-Dateien haben, können Sie LIB/DEF: zum Erstellen der Import-Bibliothek (.lib) und Exportdatei (.exp):
LIB/DEF: mydll.OBJ
Weitere Informationen über den Befehl LIB finden Sie in "LIB Reference" in Visual C++ Books Online.

Darüber hinaus finden Sie die folgenden Artikel der Microsoft Knowledge Base:
140485Exportieren von PASCAL wie Symbole in 32-Bit-DLLs

Eigenschaften

Artikel-ID: 131313 - Geändert am: Dienstag, 29. Juni 2004 - Version: 2.1
Die Informationen in diesem Artikel beziehen sich auf:
  • The Microsoft Library Manager (LIB.EXE), wenn verwendet mit:
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 5.0 Standard Edition
Keywords: 
kbmt kb3rdparty kbcode kbhowto KB131313 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 131313
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com