Heim >Backend-Entwicklung >C++ >Wie lade und rufe ich eine Funktion dynamisch aus einer DLL in C auf?

Wie lade und rufe ich eine Funktion dynamisch aus einer DLL in C auf?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-12 22:58:14666Durchsuche

How to Dynamically Load and Call a Function from a DLL in C  ?

Funktion dynamisch aus einer DLL laden

Frage:

Sie haben eine DLL mit einer Funktion namens funci( ) und versuchen, diese Funktion von C aus zu laden und darauf zuzugreifen. Es tritt jedoch die Fehlermeldung „‚funci‘ wurde in diesem Bereich nicht deklariert“ auf. Wie können Sie den Zeiger der DLL verwenden, um auf die Funktion zuzugreifen?

Antwort:

Schritt 1: Laden Sie die DLL

HINSTANCE hGetProcIDDLL = LoadLibrary("C:\path\to\test.dll");

Dadurch wird die DLL in den Speicher des Prozesses geladen.

Schritt 2: Funktionsadresse auflösen

Sie müssen die Adresse der Funktion mit GetProcAddress abrufen.

typedef int (__stdcall *f_funci)(); // Define function pointer
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");

Schritt 3: Funktionsadresse überprüfen

Überprüfen Sie, ob die Funktionsadresse erfolgreich erhalten wurde.

if (!funci) {
  std::cout << "Could not locate the function" << std::endl;
  return EXIT_FAILURE;
}

Schritt 4: Funktion aufrufen

Sobald Sie den Funktionszeiger haben, können Sie ihn aufrufen.

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

Schritt 5: DLL freigeben (optional)

Geben Sie das DLL-Handle mit FreeLibrary() frei, um die DLL zu entladen Speicher.

FreeLibrary(hGetProcIDDLL);

Zusätzliche Tipps:

  • Die WinAPI-Funktion GetProcAddress erfordert den Funktionsnamen als Zeichenfolge. Stellen Sie daher sicher, dass Sie den richtigen Namen angeben.
  • Die Aufrufkonvention der exportierten Funktion (z. B. __stdcall) muss mit der übereinstimmen, die beim Definieren des Funktionszeigers in verwendet wurde Ihr Programm.
  • Der ordnungsgemäße Export von Funktionen aus der DLL ist unerlässlich. Verwenden Sie das Attribut __declspec(dllexport), um die Funktion zu exportieren.

Das obige ist der detaillierte Inhalt vonWie lade und rufe ich eine Funktion dynamisch aus einer DLL 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