Re: [問題] 動態載入一組函式
※ 引述《james732 (好人超)》之銘言:
: 也就是說,我有一個 pure virtual class 來描述介面
: 另外有個 FastCalc.dll 裡面實作了這個介面 (當然不管它是怎麼實作的)
: 我想像上例這樣很簡單的載入整組介面來使用它
: 稍微研究過COM,不過還不是很熟,不知道它能不能做到這樣
: 如果可以的話請給我一些關鍵字或範例,COM對我來說實在不容易理解orz
: 另外我也很好奇,在Linux環境有沒有辦法解決這個問題?
: 話說,這個時候真的會很羨慕C#/Java的Reflection機制 XD
可以的,而且不需要用到 COM
然而主程式不知道誰實作了這個界面,沒辦法產生這個物件的實體
因此你需要另外一個介面來產生及銷毀物件的實體
FastCalc.dll 的實作大概像這樣:
class FastCalc : public Calc {
... // 實作
};
Calc* CreateCalc()
{
return new FastCalc;
}
void DeleteCalc(Calc* c)
{
delete c;
}
用起來則是像這樣:
typedef Calc* (*CreateFunc)(); // 先用 typedef 省麻煩
HMODULE lib = LoadLibrary("FastCalc.dll");
CreateFunc create_func = (CreateFunc)GetProcAddress(lib, "CreateCalc");
Calc* calc = create_func();
calc->add(...);
用完再用同樣的方法把 calc 傳進 DeleteCalc 銷毀即可
Linux 下的過程一模一樣
只是把 LoadLibrary 改成 dlopen
GetProcAddress 改成 dlsym 這樣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.88.109
→
02/25 00:35, , 1F
02/25 00:35, 1F
→
02/25 00:35, , 2F
02/25 00:35, 2F
→
02/25 00:36, , 3F
02/25 00:36, 3F
→
02/25 00:37, , 4F
02/25 00:37, 4F
推
02/25 00:49, , 5F
02/25 00:49, 5F
→
02/25 00:58, , 6F
02/25 00:58, 6F
→
02/25 01:03, , 7F
02/25 01:03, 7F
推
02/25 01:06, , 8F
02/25 01:06, 8F
→
02/25 01:14, , 9F
02/25 01:14, 9F
→
02/25 01:15, , 10F
02/25 01:15, 10F
→
02/25 01:16, , 11F
02/25 01:16, 11F
→
02/25 14:14, , 12F
02/25 14:14, 12F
討論串 (同標題文章)