2

単なる生のアドレスとして、まったく型指定されていない方法でCOMインターフェイスへのポインタを取得するとします。

void *p

メソッドのアドレスを見つけてアクセスするにはどうすればよいですか?* pは仮想テーブルのアドレスであり、** pは最初のメソッドのアドレスですか?すべてのポインタは常に32ビットでCOMに含まれていますか?そのため、特定のメソッドを見つけるには、メソッドがどのインデックスに表示されるかがわかっていると仮定して、4バイトの倍数で**pにインデックスを付ける必要があります。BIGエンディアンとLITTLEエンディアンの潜在的な問題はありますか?

4

1 に答える 1

0

はい、技術的にはvtableを指す必要があります。vtableのメソッドは、IUnknownメソッドから始めて、宣言された順序で表示されます。ただし、インデックスを使用してメソッドを呼び出すと、コードタイプが安全でなくなります。コンパイラには、渡すパラメータが正しいかどうかを確認する方法がありません。COMオブジェクトがproc外であり、他のホスト上にある場合、ビッグエンディアンとリトルエンディアンが重要になります。プロキシオブジェクトがその処理を行うため、クライアントに対して透過的になります。

于 2012-07-27T20:37:53.110 に答える