c++ - tr1::函数 WINAPI

标签 c++ winapi function tr1

如何将 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)后面,而不管最终目标类型的细节如何。

关于c++ - tr1::函数 WINAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2229368/

相关文章:

c++ - 使用空格取消简单循环

c++ - 允许预先计算和即时计算的结果

c++ - 如何在C++中合法地声明 vector 变量?

c - 为什么 SetFilePointerEx 的第二个参数在编译时给我一个不兼容的类型错误?

c++ - Win32 上的内存不足 (?) 问题(与 Linux 相比)

Javascript 仅在被调用的函数内工作

c++ - 带有自定义分配器的 Boost.Function

c++ - 为什么此 2D vector 会导致段错误(核心已转储)

c# - 正确使用 NativeWindow 实现 Windows Hook

具有多个参数括号的 Python 函数