私はCOMオブジェクトへのポインタを持っています。pfooはIFooを実装しています。 IFooのメソッドの1つであるpfoo-> Bar()のアドレスを取得したいと思います。 COMオブジェクトは非常によく文書化されているので、これは非常に簡単です。そして、実際にはそうです。バーは、()、たとえば、インタフェースの第五の方法(IUnknownメソッドのためのコースの会計処理)である場合、アドレスは私の質問があるCOMオブジェクトのメンバ関数のアドレスを取得するにはどうすればよいですか?
(*(void***)(pfoo))[5]
でのvtableから抽出することができ、実行する方法がありますこれは "5"を使用する必要はありませんか?エラーを起こしやすく、メソッドを数えなければならないようです。私はメソッド名だけを使いたい。ちょっと複雑なのであれば気にしない。いずれにしても、これはマクロ内ですべて実行されます。だから私の究極の質問は、pfoo、Bar、IFooなどのパラメータをとり、上記の式を評価するマクロが存在するかどうかです。
本当に欲しいのは 'IDispatch'の実装でしょうか? –
C++は、クラスインスタンスからメンバ関数へのポインタを取得させたくないようです。 IFooを実装するクラスにアクセスする必要があります。次に、 'auto pBar =&CFoo :: Bar;'と言うことができます。 '&pFoo-> Bar'を受け入れることができないので、メソッド順序を取らないマクロを構築する方法はありません。 –