我有一個指向一個COM對象pfoo實現IFoo的指針。我想獲得pfoo-> Bar()的地址,它是IFoo的一種方法。由於COM對象有很好的文檔記錄,所以這應該很容易。事實上,它是。如果酒吧()是,比如說,在接口的第五種方法(會計課程IUnknown方法的),地址可以從虛表中提取與如何獲取COM對象的成員函數的地址?
(*(void***)(pfoo))[5]
我的問題是,有沒有辦法做到這不需要使用「5」?看起來很容易出錯,不得不數數這些方法。我只想使用方法名稱。我不介意它是否有點複雜;無論如何,這都是宏觀的。所以我的最終問題是,是否存在一個採用參數pfoo,Bar和IFoo的宏,並對上述表達式求值?
難道你真的想要的是'IDispatch'實現嗎? –
C++似乎不想讓你從類實例中捕獲一個指向成員函數的指針。你需要訪問實現IFoo的類,然後你可以說'auto pBar =&CFoo :: Bar;'。鑑於它不會接受'&pFoo-> Bar',沒有辦法構造一個不採用方法序數的宏。 –