0

IHTMLDocument2::writeクラスのメソッドであるライブラリ関数()へのポインタを設定する必要がありますIHTMLDocument2。(好奇心旺盛な方のために:私はその機能を迂回でフックする必要があります)

タイプの不一致のため、これを直接行うことはできません。また、キャストを使用することもできません(reinterpret_cast<>これは「正しい」afaikは機能しません)

これが私がしていることです:

HRESULT (WINAPI *Real_IHTMLDocument2_write)(SAFEARRAY *) = &IHTMLDocument2::write

ご協力いただきありがとうございます!

4

2 に答える 2

6

関数へのポインタのタイプは次のとおりです。

HRESULT (WINAPI IHTMLDocument2::*)(SAFEARRAY*)

ご覧のとおり、クラス名で修飾されています。呼び出すクラスのインスタンスが必要です(静的関数ではないため)。

typedef HRESULT (WINAPI IHTMLDocument2::*DocumentWriter)(SAFEARRAY*);

DocumentWriter writeFunction = &IHTMLDocument2::write;

IHTMLDocument2 someDocument = /* Get an instance */;
IHTMLDocument2 *someDocumentPointer = /* Get an instance */;

(someDocument.*writefunction)(/* blah */);
(someDocumentPointer->*writefunction)(/* blah */);
于 2009-10-25T21:04:36.953 に答える
4

メンバー関数ポインタを使用する必要があります。(非静的)クラスメンバー関数を呼び出すとthis、クラスのインスタンスを参照する暗黙のポインターがあるため、通常の関数ポインターは機能しません。

于 2009-10-25T21:04:32.917 に答える