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
Freigeben: 2024-12-12 22:58:14
Original
673 Leute haben es durchsucht

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");
Nach dem Login kopieren

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");
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Schritt 4: Funktion aufrufen

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

std::cout << "funci() returned " << funci() << std::endl;
Nach dem Login kopieren

Schritt 5: DLL freigeben (optional)

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

FreeLibrary(hGetProcIDDLL);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage