2

関数ポインターを取得して DLL からエクスポートされた関数を呼び出そうとしてGetProcAddressいますが、関数を呼び出すとアプリケーションがクラッシュします。

エクスポートされた関数の名前が正しいかどうかを確認するために、dependencywalker を使用しました。から返されたアドレスはGetProcAddressnull ではありません。呼び出し規約と関係があることはほぼ確実です。私は両方__cdeclを使用し__stdcallましたが、成功しませんでした。GetProcAdressただし、の代わりに使用したいと思います__declspec(dllimport)

DLL #1 (呼び出し元)

  • DLL#2.lib をこの DLL にリンク

    typedef void(__stdcall *ptr_init)(DWORD size);
    
    ctx.hModule = LoadLibraryA("someDLL.dll");
    ptr_init init = (ptr_init)GetProcAddress(ctx.hModule, "init");
    
    if (init == NULL) {
        out = out + " | init function is null";
    } else {
        out = out + " | init function found!";//It is found
    }
    
    DWORD test = 10;
    (*init)(test);//<-- makes application crash
    

DLL #2 (エクスポートされた関数を含む DLL)

//header.h
extern "C" __declspec(dllexport) void init(DWORD size);

//source.cpp
extern "C" __declspec(dllexport) void init(DWORD size) {
    //code
}
4

1 に答える 1