void xGetFunctionAddress(void* FunctionDefinition, std::string FunctionName)
{
*static_cast<FARPROC*>(FunctionDefinition) = xProcAddress(Module, FunctionName.c_str());
}
在上面的代码中,我试图摆脱那个FARPROC*
,使其成为跨平台的。然而,如果我转换为long long int (*)()
,它会给我一个错误,它不能静态地转换为它。所以当我定义它的时候,它就能工作了:
例如:
//This works:
void xGetFunctionAddress(void* FunctionDefinition, std::string FunctionName)
{
typedef __stdcall long long int (*Ptr)();
*static_cast<Ptr*>(FunctionDefinition) = GetProcAddress(Module, FunctionName.c_str());
}
//This doesn't:
void xGetFunctionAddress(void* FunctionDefinition, std::string FunctionName)
{
*static_cast<long long int(*)()>(FunctionDefinition) = GetProcAddress(Module, FunctionName.c_str());
}
在第二个例子中我做错了什么?
发布于 2013-06-02 01:23:21
您正在将空指针强制转换为函数指针,然后取消对其的引用。这将计算为对函数的赋值,而不是函数指针。下面是解决这个问题的方法
*static_cast<long long int(__stdcall **)()>(FunctionDefinition) = GetProcAddress(Module, FunctionName.c_str());
^^
请注意__stdcall
旁边的附加指针级别。
发布于 2013-06-02 01:14:16
查看特定的错误消息会很有用,但是看起来您的static_cast中可能缺少__stdcall dcl说明符。如果你添加它,它会起作用吗?
编辑:
再往下看,这似乎不受支持。请看这个答案:https://stackoverflow.com/a/1096349/279130,它似乎解决了同样的问题。
发布于 2013-06-02 01:24:04
GetProcAddress()定义为返回什么?
如果它是一个void *
,你不能把它转换成一个函数指针。请参阅https://stackoverflow.com/a/1096349/37386
https://stackoverflow.com/questions/16878848
复制相似问题