【发布时间】:2012-11-26 04:56:34
【问题描述】:
我正在尝试从另一个调用 GetProcAddress 的函数给出的 FARPROC 地址返回一个函数实例。想出了一个有趣的问题。函数如下:
template<class FT>
std::function<FT> to_function(FARPROC address) {
return address;
}
稍后我会创建一个没有任何问题的无输入函数:
auto try1 = to_function<int()>(addr1);
但是,当函数接受输入时,visual c++ 11 编译器会爆炸:
auto try2 = to_function<int(int)>(addr2);
它正确地返回:
错误 C2197: 'int (__stdcall *)(void)' : 调用的参数太多
所讨论的类型等同于 FARPROC,即 GetProcAddress 返回的内容,与函数的参数列表无关。
直截了当,我的问题是,在给定 to_function 的简单函数原型的情况下,如何通过将 FARPROC 转换为 std::function 的适当类型来解决此问题?提前干杯。
【问题讨论】:
-
FARPROC到底是什么? -
它只是一个函数指针 int (__stdcall *)(void)
-
我想你在找
std::bind。 -
直接对 GetProcAddress (
(int(__stdcall*)(int)) GetProcAddress(...)) 的结果进行强制转换有什么问题?将其设置为std::function不会有任何安全性。
标签: c++ function templates c++11 getprocaddress