dll problem



  • hola leute

    hab in VC eine dll erstellt und wollte sie in ein bcb-projekt zur laufzeit einbinden.
    bei GetProcAddress bekommt ich aber nen fehlercode 5 zurueck (ERROR_ACCESS_DENIED
    ).

    hier mal der code

    die dll:

    #include <windows.h>
    
    BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
    {
        hModule; ul_reason_for_call; lpReserved;
        return TRUE;
    }
    
    __declspec(dllexport) int Version(void)
    {
       return 1234;
    }
    

    bcb dynamische einbindung

    // header:
    .... irgendwo ...
    typedef int (*VersionFunc)(void);
    VersionFunc dll_func;
    
    // cpp:
    hmod = LoadLibrary("my_dll.dll"); // ist ok
    
    Memo1->Lines->Add((int)hmod);
    
    dll_func = (VersionFunc)GetProcAddress(hmod, "Version"); // error 5
    

    weiß jemand was ich da falsch mache ?

    Meep Meep



  • Du musst eine DEF-Datei verwenden um die FUnktion zu exportieren...
    Oder Du schaust nach wie die Funktion in der DLL wirklich heisst und verwendest den korrekten Namen! (=> dependencywalker.com)



  • re

    wofuer brauch ich den dependencywalker ?
    die dll hab ich selber geschrieben. da ist nur eine exportierte funktion drinnen
    und die heisse einfach 'Version'. oder was meinst du genau?

    Meep Meep



  • Meep Meep schrieb:

    wofuer brauch ich den dependencywalker ?

    Den brauchst Du zum Verifizieren.

    Meep Meep schrieb:

    die dll hab ich selber geschrieben. da ist nur eine exportierte funktion drinnen

    Das sieht fast so aus, ja.

    Meep Meep schrieb:

    und die heisse einfach 'Version'. oder was meinst du genau?

    Die heisst mit Sicherheit nicht Version, sondern z.B. ?Version@@YAHXZ. Würdest Du Dich nicht weigern, den DependencyWalker zu benutzen, hättest Du das auch gesehen. Du kannst natürlich auch das besgate DEF-File verwenden, um ein Alias zu exportieren. Dann past es wieder mit "Version".

    Im Übrigen würde ich noch __stdcall nehmen.



  • Meep Meep schrieb:

    und die heisse einfach 'Version'. oder was meinst du genau?

    Nein, die heisst nicht so.


Anmelden zum Antworten