Funktion in dll aufrufen (Win)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Funktion in dll aufrufen (Win)

    Hallo Leute,

    ich habe folgendes Problem und zwar möchte ich eine Funktion in einer Dll aufrufen. Dazu benutze ich diesen Code:

    Quellcode

    1. typedef int (WINAPI *MYPROC)(int, char[128], int); //typdefinieren für die Funktion
    2. HMODULE i = LoadLibraryA("API.dll");
    3. FARPROG b;
    4. int num, x;
    5. char number[128];
    6. b = GetProcAddress(i, "GetDeviceSN");
    7. MYPROC addr_GetDeviceSN = (MYPROC) b;
    8. num = addr_GetDeviceSN(x, number, 128);


    Wenn ich dann beim ausführen an der Funktion ankomme meckert VS rum mit folgender Fehlermeldung: "Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."

    Ich versteh ja das er ein Problem hat weil ich mir den FARPROC in MYPROC caste und dann die Funktion aufrufe, aber ich weiß nicht wie ich es anders lösen könnte.
  • Je nach Bibliothek die man verwendet werden die Paramater der Funktion Maschienencodenbedingt in verschiedenen Arten an die Funktion übergeben.

    Deswegen muss manfür die Verschiedenen Arten einen der Schlüsselwörter __cdecl, __stdcall, oder __fastcall verwenden. Siehe weiteres: msdn.microsoft.com/en-us/library/984x0h58%28v=VS.71%29.aspx

    Der Macro WINAPI sorgt dafür das __stdcall genommen wird, evtl musst du diesen Wert für deine BIB ändern.

    Ein typedef einer Funktion würde dann so aussehen (ohne Macro):

    Quellcode

    1. typedef BOOL (__stdcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);


    Mfg Rushh0ur