GetProcAddress-Funktion in C++
Hallo Jungs: habe ich geladen, meine DLL in mein Projekt, aber immer wenn ich mit der GetProcAddress-Funktion. es gibt NULL zurück! was soll ich tun?
Ich benutze diese Funktion ( double GetNumber(double x) ) "MYDLL.dll"
Hier ist ein code, den ich verwendet habe:
typedef double (*LPGETNUMBER)(double Nbr);
HINSTANCE hDLL = NULL;
LPGETNUMBER lpGetNumber;
hDLL = LoadLibrary(L"MYDLL.DLL");
lpGetNumber = (LPGETNUMBER)GetProcAddress((HMODULE)hDLL, "GetNumber");
InformationsquelleAutor der Frage Alireza | 2011-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prüfung return-codes und Aufruf
GetLastError()
wird Euch frei machen. Sie überprüfen sollten Sie die return-codes hier doppelt. Sie sind wirklich prüfen Rückkehr-codes null mal.Überprüfen
hDLL
. Ist es NULL? Wenn ja, rufen SieGetLastError()
um herauszufinden, warum. Es kann so einfach sein wie "Datei Nicht Gefunden".Wenn
lpGetNumber
NULL ist, rufen SieGetLastError()
. Es wird Ihnen sagen, warum der proc-Adresse konnte nicht gefunden werden. Es gibt ein paar wahrscheinliche Szenarien:GetNumber
GetNumber
aber es ist nicht markiertextern "c"
was in die name manglings.hDLL
ist keine gültige Bibliothek handle.Wenn es sich herausstellt, #1 oben, müssen Sie zum exportieren der Funktionen durch die Dekoration, die Erklärung mit
__declspec(dllexport)
wie diese:MyFile.h
Wenn es sich herausstellt, werden #2 oben, müssen Sie dies tun:
InformationsquelleAutor der Antwort John Dibling
Wahrscheinlich
LoadLibrary()
gescheitert. Sie kann einfach nicht sehen, denn anscheinend sind Sie nicht zu prüfen, was es wieder:EDIT:
Wir wissen nicht, wie Sie exportieren die Funktion in der DLL code, aber dieser thread erklärt ein paar Gründe auf, warum GetProcAddress ausfällt.
InformationsquelleAutor der Antwort karlphillip
Möchten Sie vielleicht zu prüfen, ob Ihr
GetNumber
Funktion exportiert als__stdcall
Funktion.Wenn das so ist, versuchen
GetProcAddress(hDLL, "_GetNumber@N");
woN
ist die Gesamtzahl der bytes derGetNumber
's argument-Liste. Zum Beispiel, wenn Ihre Funktion Unterschrift istint GetNumber(int a, double b)
seinen wirklichen Namen in der DLL wird_GetNumber@12
.Referenz: __stdcall
InformationsquelleAutor der Antwort user1667687