1
void xGetFunctionAddress(void* FunctionDefinition, std::string FunctionName)
{
    *static_cast<FARPROC*>(FunctionDefinition) = xProcAddress(Module, FunctionName.c_str());
}

在上面的代码中,我试图摆脱它FARPROC*以使其跨平台。但是,如果我转换为long long int (*)(),它会给我一个错误,它不能静态地转换为那个。因此,当我 typedef 它时,它可以工作:

前任:

//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());
}

在第二个例子中我做错了什么?:S

4

3 回答 3

3

您正在将 void 指针转换为函数指针,然后取消引用它。这将评估为对函数而不是函数指针的赋值。以下应该采取的问题

*static_cast<long long int(__stdcall **)()>(FunctionDefinition) = GetProcAddress(Module, FunctionName.c_str());
                                     ^^

请注意 旁边的附加指针级别__stdcall

于 2013-06-02T01:23:21.300 回答
1

查看特定的错误消息会很有用,但看起来您可能在 static_cast 中缺少 __stdcall dcl-specifier。如果你添加它,它会起作用吗?

编辑:

进一步看,似乎这可能不受支持。请看这个答案:https ://stackoverflow.com/a/1096349/279130这似乎解决了同样的问题。

于 2013-06-02T01:14:15.907 回答
1

GetProcAddress() 定义返回什么?

如果它是void *,则不能将其可移植地转换为函数指针。见https://stackoverflow.com/a/1096349/37386

于 2013-06-02T01:24:04.360 回答