GetProcAddress



  • Hallo zusammen,

    Ich rufe die folgende Funktion bei mir auf (Direktaufruf ist leider nicht möglich):

    typedef BOOL (WINAPI *PGETUSERNAMEEX) (EXTENDED_NAME_FORMAT NameFormat, LPSTR lpNameBuffer, PULONG nSize);
    
    PGETUSERNAMEEX pFunc;
    HMODULE hMod = LoadLibrary("secur32.dll");
    pFunc = (PGETUSERNAMEEX)GetProcAddress(hMod, "GetUserNameExA");
    (*pFunc)(NameDisplay, buffer, &size);
    

    In der Zeile "(*pFunc)(NameDisplay, buffer, &size)" gibt es jedoch immer eine Zugriffsverletzung, leider weiss ich einfach nicht warum. Die Deklaration der Funktion scheint in Ordnung zu sein. pFunc ist ebenfalls auch nicht leer... 😞


  • Mod

    Bist Du schon mal auf die Idee gekommen, dass
    1. LoadLibrary NULL returniert
    2. GetProcAddress NULL returniert

    Welches OS hast Du?



  • Ja das bin ich tatsächlich 🙂

    Aber weder LoadLibrary noch GetProcAddress gibt NULL zurück, Debugger sei dank.

    Ich nutze Windows Vista.



  • Welche Parameter übergibst du denn konkret, d.h. welchen Datentyp und welchen Inhalt haben die 3 Variablen?



  • LPTSTR buffer = "";
    DWORD size = MAX_PATH;
    
    (*pFunc)(NameDisplay, buffer, &size);
    

    Beim "normalen" Aufruf GetUserNameEx gibts mit diesen Parametern keine Probleme und ich kriege den gewünschten Wert zurück.



  • Bin zwar im Moment zu Hause am privaten PC, aber ich glaube ich habe den Fehler gefunden:

    statt LPTSTR buffer = "";
    sollte stehen: LPTSTR buffer = new TCHAR[MAX_PATH];

    Hoffe das dies die Lösung ist 🙂


  • Mod

    Korrket. Noch einfacher:

    TCHAR buffer[MAX_PATH];
    DWORD size = MAX_PATH;
    (*pFunc)(NameDisplay, buffer, &size);
    

Log in to reply