C++ tr1::函数WINAPI
如何使用带有WINAPI调用约定的tr1::函数?(至少在windows中)。我可以使用Visual C++ 9 SP1 Tr1或Boost的一个…< /P>C++ tr1::函数WINAPI,c++,winapi,function,tr1,C++,Winapi,Function,Tr1,如何使用带有WINAPI调用约定的tr1::函数?(至少在windows中)。我可以使用Visual C++ 9 SP1 Tr1或Boost的一个…< /P> typedef void (WINAPI *GetNativeSystemInfoPtr)(LPSYSTEM_INFO); HMODULE h = LoadLibrary (_T("Kernel32.dll")); GetNativeSystemInfoPtr fp = (GetNativeSystemInfoPtr) GetProcAd
typedef void (WINAPI *GetNativeSystemInfoPtr)(LPSYSTEM_INFO);
HMODULE h = LoadLibrary (_T("Kernel32.dll"));
GetNativeSystemInfoPtr fp = (GetNativeSystemInfoPtr) GetProcAddress (h,"GetNativeSystemInfo");
SYSTEM_INFO info;
fp(&info); //works!
// This doesn't compile
function< void WINAPI (LPSYSTEM_INFO) > fb = (GetNativeSystemInfoPtr) GetProcAddress (h,"GetNativeSystemInfo");
typedef void(WINAPI*GetNativeSystemInfoPtr)(LPSYSTEM\u信息);
HMODULE h=LoadLibrary(_T(“Kernel32.dll”);
GetNativeSystemInfoPtr fp=(GetNativeSystemInfoPtr)GetProcAddress(h,“GetNativeSystemInfo”);
系统信息;
计划生育和信息//作品
//这是不可编译的
函数fb=(GetNativeSystemInfo)GetProcAddress(h,“GetNativeSystemInfo”);
这将编译:
#include <boost/function.hpp>
#include <windows.h>
int main(void)
{
typedef void (WINAPI *GetNativeSystemInfoPtr)(LPSYSTEM_INFO);
HMODULE h = LoadLibrary (("Kernel32.dll"));
GetNativeSystemInfoPtr fp = (GetNativeSystemInfoPtr) GetProcAddress (h,"GetNativeSystemInfo");
SYSTEM_INFO info;
fp(&info); //works!
boost::function< void (LPSYSTEM_INFO) > fb = (GetNativeSystemInfoPtr) GetProcAddress (h,"GetNativeSystemInfo");
SYSTEM_INFO info2;
fb(&info2);
return 0;
}
#包括
#包括
内部主(空)
{
typedef void(WINAPI*GetNativeSystemInfoPtr)(LPSYSTEM_信息);
HMODULE h=LoadLibrary((“Kernel32.dll”);
GetNativeSystemInfoPtr fp=(GetNativeSystemInfoPtr)GetProcAddress(h,“GetNativeSystemInfo”);
系统信息;
fp(&info);//有效!
boost::函数fb=(GetNativeSystemInfo)GetProcAddress(h,“GetNativeSystemInfo”);
系统信息2;
fb(和info2),;
返回0;
}
“信息”上的内容与“信息2”上的内容相同,因此它似乎有效
我的理解是,用于实例化boost::函数的参数是其运算符()的签名。它与它所包装的函数对象的函数签名没有严格的关系。否则,它的好处将丢失,因为boost::function的实用程序正是能够将任何可调用的内容封装在统一接口后面,而不管最终目标类型的细节。感谢您提供的解决方案和解释!!