[英]tr1::function WINAPI
如何在WINAPI調用約定中使用tr1 :: function? (至少在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的實用程序正是能夠包裝在統一接口后面可調用的任何東西,而不管最終目標類型的細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.