首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tr1::function WINAPI

tr1::function WINAPI
EN

Stack Overflow用户
提问于 2010-02-09 21:33:09
回答 1查看 722关注 0票数 4

如何通过WINAPI调用约定使用tr1::函数?(至少在windows中)。我可以使用visual c++ 9 SP1 TR1或BOOST的one...

代码语言:javascript
复制
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");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-09 21:59:18

这将进行编译:

代码语言:javascript
复制
#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::函数的参数是其运算符()的签名。它与它包装的函数对象的函数的签名没有严格的关系。否则,它的好处将会丢失,因为boost::function的实用程序正是为了能够在统一接口后面包装任何可调用的东西,而不管最终目标类型的细节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2229368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档