Heim >Backend-Entwicklung >C++ >Wie lade und rufe ich Funktionen dynamisch aus DLLs in C auf?

Wie lade und rufe ich Funktionen dynamisch aus DLLs in C auf?

Barbara Streisand
Barbara StreisandOriginal
2024-12-08 11:29:10761Durchsuche

How to Dynamically Load and Call Functions from DLLs in C  ?

Dynamisches Laden von Funktionen aus DLLs

Das dynamische Laden von Funktionen aus DLLs (Dynamic Link Libraries) in C ermöglicht Ihnen den Zugriff auf separat definierte Funktionen Module zur Laufzeit. So gehen Sie dieses Problem an:

1. Laden Sie die DLL:

<br>HINSTANCE hDLL = LoadLibrary("path/to/dll.dll");<br>

Dieser Schritt lädt die DLL in den Speicher und gibt ein Handle dafür zurück.

2. Holen Sie sich den Funktionszeiger:

Um auf eine Funktion innerhalb der DLL zuzugreifen, müssen Sie deren Adresse mit GetProcAddress abrufen:

<br>typedef int (__stdcall *f_funci )(); // Funktionszeigertyp definieren<br>f_funci funci = (f_funci)GetProcAddress(hDLL, "funci");<br>

In diesem Beispiel wird davon ausgegangen, dass Ihre Funktion den Namen „funci“ trägt und verwendet die __stdcall-Aufrufkonvention.

3. Aufrufen der Funktion:

Sobald Sie den Funktionszeiger haben, können Sie die Funktion wie jede andere Funktion aufrufen:

<br>int result = funci(); <br>

4. Exportieren der Funktion aus der DLL:

In der DLL muss Ihre Funktion mit __declspec(dllexport) exportiert werden, um sie für andere Module zugänglich zu machen:

<br>int __declspec(dllexport) __stdcall funci() {<br> // Funktion Definition<br>}<br>

Zusätzliche Tipps:

  • Es ist ratsam, das DLL-Handle mit FreeLibrary() freizugeben, wenn es verfügbar ist nicht mehr benötigt.
  • Verwenden Sie einen Funktionszeigertyp, der genau mit der Signatur der Funktion in übereinstimmt DLL.
  • Stellen Sie eine ordnungsgemäße Fehlerbehandlung sicher, um Probleme beim Laden der DLL oder der Funktionsauflösung zu beheben.

Das obige ist der detaillierte Inhalt vonWie lade und rufe ich Funktionen dynamisch aus DLLs in C auf?. 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