DLLs in RAD Studio verwenden (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Packages und DLLs erstellen


RAD Studio unterstützt DLLs (Dynamic-Link Libraries, dynamische Link-Bibliotheken) für Windows (DLL-Dateien) und OS X (DYLIB-Dateien).

Wählen Sie zum Erstellen einer dynamischen Bibliothek Datei > Neu > Weiter aus. Wählen Sie im Knoten C++Builder-Projekte den Eintrag Dynamische Link-Bibliothek aus.

Der folgende Code wird automatisch in der Hauptdatei des neu erstellen Projekts generiert:

//   Important note about DLL memory management when your DLL uses the
//   static version of the RunTime Library:
//
//   If your DLL exports any functions that pass String objects (or structs/
//   classes containing nested Strings) as parameter or function results,
//   you will need to add the library MEMMGR.LIB to both the DLL project and
//   any other projects that use the DLL.  You will also need to use MEMMGR.LIB
//   if any other projects which use the DLL will be performing new or delete
//   operations on any non-TObject-derived classes which are exported from the
//   DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
//   EXE's to use the BORLNDMM.DLL as their memory manager.  In these cases,
//   the file BORLNDMM.DLL should be deployed along with your DLL.
//
//   To avoid using BORLNDMM.DLL, pass string information using "char *" or
//   ShortString parameters.
//
//   If your DLL uses the dynamic version of the RTL, you do not need to
//   explicitly add MEMMGR.LIB as this will be done implicitly for you

#pragma hdrstop
#pragma argsused

extern "C" int _libmain(unsigned long reason)
{
	return 1;
}

Die Funktion _libmain ist der Eintrittspunkt in die dynamische Bibliothek. _libmain wird beim Laden der dynamischen Bibliothek aufgerufen. Diese Funktion enthält üblicherweise den Initialisierungscode.

Exportieren von Funktionen

In einer dynamischen Bibliothek definierte Funktionen müssen exportiert werden, damit sie außerhalb der dynamischen Bibliothek sichtbar sind. Mit der folgenden Syntax werden Funktionen exportiert:

extern "C" __declspec(dllexport) <return_type> <function_name>(<function_parameters>);

Importieren von Funktionen

Für die Verwendung von Funktionen, die in einer dynamischen Bibliothek definiert sind, müssen Sie die Funktion als importierte Funktion deklarieren, die Bibliothek, in der die Funktion definiert ist, laden und dann auf die Funktion zugreifen. Mit der folgenden Syntax werden Funktionen importiert:

extern "C" __declspec(dllimport) <return_type> <function_name>(<function_parameters>);

Hinweis: Der importierte Funktionsprototyp muss mit der Definition der Funktion in der dynamischen Bibliothek übereinstimmen.

Verwenden einer dynamischen Link-Bibliothek

Zum Aufrufen der von einer dynamischen Link-Bibliothek exportierten Funktionen muss die Bibliothek in den Arbeitsspeicher geladen werden, und die Funktion muss als importierte Funktion deklariert werden. Es gibt zwei Möglichkeiten zum Laden der Bibliothek: statisch (beim Linken) und dynamisch (zur Laufzeit).

Statisches Laden der Bibliothek

Für die Ziele Win32 und Win64 können Sie dem Projekt die Importbibliothek im Quelltext hinzufügen, indem Sie die folgende pragma-Direktive in eine Quelldatei des Projekts einfügen:

#pragma comment(lib, "TestDLL")
Hinweis: Beachten Sie, dass der Dateiname keine Erweiterung enthält.


Für Win32 muss die dynamische Link-Bibliothek über eine Importbibliothek mit der Erweiterung .lib eingebunden werden. Für Win64 muss die dynamische Link-Bibliothek über eine Importbibliothek mit der Erweiterung .a eingebunden werden. Die Importbibliothek wird automatisch vom dynamischen Link-Bibliotheksprojekt generiert.

Wenn Sie nur für WIN32 oder nur für WIN64 entwickeln, können Sie anstatt der Direktive pragma Ihrem Projekt die Importbibliothek hinzufügen, indem Sie in der Projektverwaltung mit der rechten Maustaste auf das Projekt klicken und Hinzufügen... auswählen. Stellen Sie nach dem Hinzufügen der Importbibliothek zu Ihrem Projekt sicher, dass die Funktionen importiert worden sind (verwenden Sie die oben beschriebene Importsyntax). Nun können diese Funktionen in Ihrem Projekt verwendet werden.

Hinweis: In dem dynamischen Link-Bibliotheksprojekt muss die Option Importbibliothek erzeugen auf True gesetzt sein, damit die Importbibliothek (.lib-Datei) beim Erzeugen des Projekts generiert wird. Weitere Informationen finden Sie unter C++-Linker.

Dynamisches Laden der Bibliothek

Nach der Deklaration der importierten Funktionen muss die dynamische Bibliothek zur Laufzeit geladen werden. Dieser Vorgang wird mit der Funktion LoadLibrary ausgeführt. Wenn die Bibliothek in den Arbeitsspeicher geladen wurde, können Sie mit der Funktion GetProcAddress einen Zeiger auf eine bestimmte Funktion abrufen.

Ein vollständiges Beispiel für die Verwendung von dynamischen Bibliotheken in C++Builder-Anwendungen finden Sie hier: Tutorial: Verwenden von dynamischen Link-Bibliotheken in C++Builder-Anwendungen .

Siehe auch