2010-07-18 26 views
0

我有一個接受函數指針的函數將其轉換爲boost :: function的函數。然後將其存儲並從DLL中調用。將參數發送到一個DLL以進行boost :: bind'ed

我想以類似的方式添加一個函數到DLL來處理成員函數。我知道我需要使用boost :: bind將成員函數指針和對象包裝在一起。我想在DLL端進行綁定,但EXE不需要包含boost庫。

你會怎麼寫這個函數?一個接受成員函數指針和對象作爲參數並將它們綁定在一起。

謝謝!

+0

爲什麼不在DLL中使用'boost :: bind'? – Thomas 2010-07-18 09:24:46

+0

我想要使用boost綁定我只是不知道如何通過什麼是必需的,以執行從exe文件到dll的綁定 – 2010-07-18 09:29:00

+0

發佈一些示例代碼來演示您的問題。 – 2010-07-19 01:51:07

回答

1
你被@Kylotan警告

,所以你可以嘗試這樣的事:

__declspec(dllexport) void store_mem_fn(void(Your_class::*mem_fn)(void), Your_class& instance) 
{ 
    std::vector<boost::function<void(void)> > container; 
    container.push_back(boost::bind(mem_fn, instance)); 
} 
0

是不是提升開源?如果是這樣,窺探升壓代碼,瞭解它是如何完成的,並且自己重新實現它,而不依賴於它。

1

嘗試將成員函數指針傳遞到DLL中可能不是個好主意,因爲它們的大小可能因特定情況而異。 (一些細節here。)也許如果你總是知道你將用相同的編譯器構建應用程序的兩個部分,你會沒事的。

至於功能上,我希望它會是這個樣子(沒有經過充分測試和未編譯的代碼):

typedef void(ObjectType::*OTMemberFn)(); 

boost::function<void (ObjectType o)> bind_mem_fn(ObjectType o, OTMemberFn mf) 
{ 
    return boost::bind(mf, o); 
} 
相關問題