Heim >Backend-Entwicklung >C++ >Wie kann ich Funktionen aus einer DLL in C dynamisch laden und verwenden?

Wie kann ich Funktionen aus einer DLL in C dynamisch laden und verwenden?

Susan Sarandon
Susan SarandonOriginal
2024-12-20 14:28:10379Durchsuche

How Can I Dynamically Load and Use Functions from a DLL in C  ?

Eine Funktion dynamisch aus einer DLL laden

Einführung

Dynamische Verknüpfung ermöglicht das Laden einer Funktion aus einer DLL zur Laufzeit und erweitert so die Funktionalität von Ihr Programm. In diesem Artikel erfahren Sie, wie Sie dies erreichen.

Laden der DLL

Der erste Schritt besteht darin, die DLL in den Speicher des aktuellen Prozesses zu laden. Dies erfolgt mithilfe der LoadLibrary-Funktion:

HINSTANCE hGetProcIDDLL = LoadLibrary("path/to/test.dll");

Abrufen der Funktionsadresse

Sobald die DLL geladen ist, müssen Sie die Adresse der Funktion ermitteln, die Sie aufrufen möchten. Dazu verwenden wir die Funktion GetProcAddress:

typedef int (__stdcall *f_funci)();
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");

Beachten Sie, dass Sie einen Funktionszeigertyp definieren müssen, der mit der Signatur der exportierten Funktion übereinstimmt. In unserem Fall handelt es sich um eine Funktion, die eine Ganzzahl zurückgibt und keine Argumente akzeptiert.

Funktion aus DLL exportieren

Damit die DLL erfolgreich geladen wird, müssen Sie die Funktion korrekt exportieren. Fügen Sie dem Quellcode Ihrer DLL Folgendes hinzu:

int __declspec(dllexport) __stdcall funci() {
  // ...
}

Verwenden der Funktion

Sobald die Adresse der Funktion erhalten wurde, können Sie sie wie jede andere Funktion aufrufen:

std::cout << "funci() returned " << funci() << std::endl;

DLL-Handle freigeben

Zur Ressourcenbereinigung empfiehlt es sich, das DLL-Handle freizugeben, wenn es nicht benötigt wird mehr:

FreeLibrary(hGetProcIDDLL);

Indem Sie diese Schritte befolgen, können Sie Funktionen von DLLs dynamisch laden und verwenden und so die Flexibilität und Erweiterbarkeit Ihres Programms erheblich verbessern.

Das obige ist der detaillierte Inhalt vonWie kann ich Funktionen aus einer DLL in C dynamisch laden und verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn