我遇到GetProcAddress问题: 我写了一个简单的DLL,里面只有一个函数:
extern "C" LRESULT WINAPI Function(HWND Hwnd, UINT Message,
WPARAM wParam, LPARAM lParam)
{
Beep(1000, 1000);
return CallNextHookEx(0, Message, wParam, lParam);
}
当我尝试使用ErrorCode 127(ERROR_PROC_NOT_FOUND)获取函数的地址GetProcAddress失败时。但是,如果我使用void作为函数类型,它可以完美地工作。我无法弄清楚为什么它会像这样。任何建议将不胜感激!
BTW:DependencyWalker显示函数的名称确实是“Function”,没有应用任何更改。
答案 0 :(得分:4)
GetProcAddress只有两种失败模式:
除非您使用.def文件重命名导出或创建了64位DLL,否则此函数的导出名称不是“函数”。对于32位版本,它将是“_Function @ 16”。 @ 16后缀与你无法使用任何参数的函数有很大关系。
从Visual Studio命令提示符运行DLL上的Dumpbin.exe / exports以查看导出。删除同一目录中的.pdb文件(如果有)。
答案 1 :(得分:2)
最好使用带有导出函数名称的模块定义(.def文件)而不是__declspec(dllexport)。管理它们要容易得多。
也是这个
#define DllExport extern "C" __declspec (dllexport)
导致导出的dll函数名称没有任何c ++“decorations”