関数ポインターを取得して DLL からエクスポートされた関数を呼び出そうとしてGetProcAddress
いますが、関数を呼び出すとアプリケーションがクラッシュします。
エクスポートされた関数の名前が正しいかどうかを確認するために、dependencywalker を使用しました。から返されたアドレスはGetProcAddress
null ではありません。呼び出し規約と関係があることはほぼ確実です。私は両方__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
}