GetProcAddress()
在 32 位 DLL 上使用的正确方法是什么?在win32上,共有三种调用约定,cdecl、stdcall和fastcall。如果 DLL 中的函数是foo
他们将通过以下方式装饰名称_foo
,_foo@N
并且@foo@N
.
但是如果 dll 的作者使用了 .def 文件,那么导出的名称将被更改为只是“foo”而没有任何修饰。
这给我带来了麻烦,因为如果我想foo
从使用 stdcall 的 dll 加载,我应该使用修饰名称:
void *h = LoadLibraryEx(L"foo.dll", NULL, 0);
GetProcAddres((HMODULE)h, L"_foo@16");
或未装饰的:
void *h = LoadLibraryEx(L"foo.dll", NULL, 0);
GetProcAddres((HMODULE)h, L"foo");
? 我应该猜吗?我查看了许多 32 位 DLL 文件(stdcall 和 cdecl),它们似乎都导出了未修饰的名称。但是你能假设情况总是如此吗?