GetNativeSystemInfoPtr

GetNativeSystemInfoPtr

如何将tr1::function与WINAPI调用约定一起使用? (至少在Windows中)。我可以使用Visual C++ 9 SP1 TR1或BOOST的...

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");

最佳答案

这样编译:

#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;
}

并且“info”上的内容与“info2”中的内容相同,因此似乎可以正常工作。

我的理解是,用于实例化boost::function的参数是其operator()的签名。它与包装的功能对象的功能签名不严格相关。否则,它的好处将会丧失,因为boost::function的实用程序恰好能够在统一接口(interface)后面包装任何可调用的东西,而与最终目标类型的细节无关。

08-19 13:07