IMPDEF.EXE: Der Moduldefinitions-Manager

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Befehlszeilenhilfsprogramme - Index

Hinweis: IMPDEF wird gegenwärtig nur für Win32-Anwendungen verwendet.
Verwenden Sie für Win64-Anwendungen MKEXP.EXE: Das C++-Hilfsprogramm für Importbibliotheken für 64-Bit-Windows.

Importbibliotheken ermöglichen den Zugriff auf die Funktionen in einer dynamischen Windows-Linkbibliothek (DLL). Importbibliotheken enthalten Datensätze. Jeder Datensatz enthält den Namen einer DLL und gibt an, an welcher Stelle der DLL sich die importierten Funktionen befinden. Diese Datensätze werden mit dem Linker in die Anwendung eingebunden und versorgen Windows mit den für die Verarbeitung von DLL-Funktionsaufrufen erforderlichen Informationen. Eine Importbibliothek kann den IMPORTS-Abschnitt einer Moduldefinitionsdatei zum Teil oder vollständig ersetzen.

IIMPDEF akzeptiert als Eingabe den Namen einer DLL und gibt eine Moduldefinitionsdatei aus, deren EXPORTS-Abschnitt die Namen der aus der DLL exportierten Funktionen enthält.

Befehlszeilensyntax

IMPDEF <Optionen> <Ziel.def> <Quelle.dll>

Um die Hilfe für die Befehlszeile anzuzeigen, geben Sie Folgendes ein:

impdef 


Befehlszeilenoptionen

Option Beschreibung
-a

Fügt den _-Alias für cdecl-Funktionen zur Kompatibilität mit Microsoft-Bibliotheken ein.

-h

Gibt Hinweise aus.


Zum Beispiel:

IMPDEF ZielName.DEF QuellName.DLL

Dies erzeugt eine Moduldefinitionsdatei mit dem Namen ZielName.DEF aus der Datei QuellName.DLL. Die erzeugte Moduldefinitionsdatei sieht etwa folgendermaßen aus:

LIBRARY     <DateiName>
DESCRIPTION '<Beschreibung>'
EXPORTS
            <ExportFunkName>           @<Ordinal>
        .
        .
        .
            <ExportFunkName>           @<Ordinal>
  • <DateiName> ist der Stammdateiname der DLL.
  • '<Beschreibung>' ist der Wert der Anweisung DESCRIPTION, wenn die DLL vorher mit einer Moduldefinitionsdatei gelinkt wurde, die eine DESCRIPTION-Anweisung enthält.
  • <ExportFunkName> ist der Name einer Exportfunktion.
  • <Ordinal> ist der Ordinalwert dieser Funktion (eine Ganzzahl).


Klassen in einer DLL

IMPDEF ist besonders nützlich für eine DLL, die C++-Klassen verwendet. Wird die Klasse mit dem Schlüsselwort __declspec (oder _export) definiert, werden alle Nicht-Inline-Elementfunktionen und statischen Datenelemente dieser Klasse exportiert. In diesem Fall ist es einfacher, eine Moduldefinitionsdatei von IMPDEF anlegen zu lassen, da diese alle Exportfunktionen auflistet und automatisch alle Elementfunktionen und statischen Datenelementen einbezieht.

Da die Namen dieser Funktionen verkürzt sind, wäre es sehr mühsam, sie alle im EXPORTS-Abschnitt einer Moduldefinitionsdatei aufzulisten, um dann aus dieser Datei eine Importbibliothek zu erzeugen. Wenn IMPDEF zur Erzeugung der Moduldefinitionsdatei verwendet wird, enthält diese den Ordinalwert jeder Exportfunktion. Wenn der exportierte Name verkürzt ist, trägt IMPDEF auch den nicht-verkürzten Originalnamen der Funktion als Kommentar nach dem Funktionseintrag ein. Zum Beispiel:

LIBRARY     <DateiName>
DESCRIPTION '<Beschreibung>'
EXPORTS
            <VerkürzterExportFunkName>  @<Ordinal> ; <ExportFunkName>
        .
        .
        .
            <VerkürzterExportFunkName>  @<Ordinal> ; <ExportFunkName>
  • <DateiName> ist der Stammdateiname der DLL.
  • '<Beschreibung>' ist der Wert der Anweisung DESCRIPTION, wenn die DLL vorher mit einer Moduldefinitionsdatei gelinkt wurde, die eine DESCRIPTION-Anweisung enthält.
  • <VerkürzterExportFunkName> ist der verkürzte Funktionsname.
  • <Ordinal> ist der Ordinalwert dieser Funktion (eine Ganzzahl).
  • <ExportFunkName> ist der Originalname der Funktion.


Funktionen in einer DLL

IMPDEF legt eine editierbare Quelltextdatei an, die alle Exportfunktionen der DLL auflistet. Diese .DEF-Datei kann so bearbeitet werden, dass sie nur die Funktionen enthält, die einer bestimmten Anwendung zur Verfügung stehen sollen. Wird dann IMPLIB für die bearbeitete .DEF-Datei aufgerufen, wird eine Importbibliothek angelegt, die Importinformationen für eine festgelegte Untermenge der Exportfunktionen einer DLL enthält.

Angenommen, es soll eine DLL weitergegeben werden, deren Funktionen von verschiedenen Anwendungen verwendet werden sollen. Jede Exportfunktion in der DLL ist mit dem Schlüsselwort __declspec (oder _export) definiert. Wenn nun alle Anwendungen auch alle Exportfunktionen der DLL verwenden, kann mit IMPLIB eine einzige Importbibliothek für die DLL angelegt werden. Diese Importbibliothek kann dann zusammen mit der DLL weitergegeben werden. Sie enthält Importinformationen für alle Exportfunktionen der DLL und kann mit jeder Anwendung gelinkt werden. Dadurch entfällt die Notwendigkeit, alle benötigten DLL-Funktionen im IMPORTS-Abschnitt der Moduldefinitionsdatei für jede einzelne Anwendung aufzuführen.

Angenommen, einer bestimmten Anwendung sollen nur einige der DLL-Exportfunktionen zur Verfügung stehen. Im Idealfall wäre das eine maßgeschneiderte Importbibliothek, die mit der Anwendung gelinkt würde und die Importinformationen nur für die Untermenge der Funktionen enthält, die von der Anwendung benötigt werden. Alle anderen Exportfunktionen in der DLL blieben der Anwendung so verborgen.

Um eine Importbibliothek anzulegen, die diesen Anforderungen gerecht wird, muss IMPDEF für die compilierte und gelinkte DLL ausgeführt werden. IMPDEF erzeugt eine Moduldefinitionsdatei, in deren EXPORTS-Abschnitt alle Exportfunktionen der DLL aufgeführt sind. Diese Moduldefinitionsdatei kann bearbeitet werden, das heißt, es können die Einträge für die Funktionen, die nicht in die angepasste Importbibliothek aufgenommen werden sollen, aus dem EXPORTS-Abschnitt entfernt werden. Wird dann IMPLIB für die bearbeitete Moduldefinitionsdatei aufgerufen, wird eine Importbibliothek erzeugt, die nur die Importinformationen für die im EXPORTS-Abschnitt der Moduldefinitionsdatei aufgelisteten Funktionen enthält.

Siehe auch