看板 C_and_CPP 關於我們 聯絡資訊
假如我有這樣的一組介面: class Calc { public: virtual int add(int x, int y) = 0; virtual int sub(int x, int y) = 0; virtual int mul(int x, int y) = 0; virtual int div(int x, int y) = 0; }; 我想問的是,有沒有辦法做到類似這樣的東西? int main() { Calc *calc = NULL; HANDLE hLibrary = Dynamic_Load("FastCalc.dll"); calc = GetInterface(hLibrary); calc->add(....); calc->sub(....); calc->mul(....); calc->div(....); return 0; } 也就是說,我有一個 pure virtual class 來描述介面 另外有個 FastCalc.dll 裡面實作了這個介面 (當然不管它是怎麼實作的) 我想像上例這樣很簡單的載入整組介面來使用它 稍微研究過COM,不過還不是很熟,不知道它能不能做到這樣 如果可以的話請給我一些關鍵字或範例,COM對我來說實在不容易理解orz 另外我也很好奇,在Linux環境有沒有辦法解決這個問題? 話說,這個時候真的會很羨慕C#/Java的Reflection機制 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 101.13.50.119 ※ 編輯: james732 來自: 101.13.50.119 (02/24 23:49)
purpose:為什麼不用 GetProcAddress(..., add); 就好呢 02/25 00:14
因為它一次只能取得一個Function 我希望能夠有辦法一口氣取得一組Function 最好還能像我的例子,用物件的方式來操作它 用起來就像一個普通的object pointer ※ 編輯: james732 來自: 101.13.50.119 (02/25 00:26)
QQ29:J大問下,單獨想取得calc::add Getpro..(要怎寫呢) 02/25 14:46
QQ29:就算拿到funcion address..沒拿到instance該怎呼叫呢 02/25 14:49
QQ29:因為我也是看到都export 一個creator, 動態的話 ,class 是唯 02/25 14:52
QQ29:一解嗎 02/25 14:53
littleshan:你拿不到 Calc::add 的位址,因為它是 virtual ← 重點 02/25 15:01
littleshan:回想一下呼叫 virtual function 的方法 02/25 15:02
littleshan:從instance取得vtable → 從vtable取得function addr 02/25 15:03
littleshan:所以沒有instance你就不可能拿到Calc::add的位址 02/25 15:03
littleshan:回過頭來,「取得Calc::add的位址」這個想法就有問題 02/25 15:04
littleshan:OOP的多型就是為了讓你省下自己去拿函式位址的功夫 02/25 15:05
littleshan:所以把virtual function的位址封裝在vtable裡面 02/25 15:06
littleshan:為什麼你還要反其道而行呢 02/25 15:06
QQ29:那若是非virtual的function 該怎麼寫呢@@ 02/25 20:58