Visual Studio拡張インターフェイスの未使用のメソッド

Visual Studioパッケージの IVsHierarchy インターフェイス Unused1 Unused1 Unused2 Unused3 Unused4 以下の説明:

Adds new methods without recompiling or breaking binary compatibility.

誰かがこれをもっと詳しく説明できますか?これらのメソッドはどのようにして正確に役立ちますか?

4

1 答え

Visual Studio拡張オブジェクトはCOMで実装されています。 COMの難しいルールの1つは、インターフェイスが不変であることです。インタフェースを変更するには、インタフェースIIDを再割り当てする必要があります。インタフェースを識別するGUID。それは、インターフェイスを使用する誰にでも多くの痛みを引き起こします。コードを変更して再コンパイルする必要があります。

この不変性要件は、フードの下でCOMインターフェイスがメソッドアドレスのテーブルとして実装されるために必要です。クライアントコードでテーブルがどのように見えるかと、サーバーによって実装されている実際のテーブルとの間に不一致があると、災害が発生します。つまり、インタフェースがバイナリ互換でない場合です。これは、クライアントコードが間違ったメソッドを呼び出したときや、関連するメソッドがまったくないテーブルスロットを使用したときにトリガされる非常に、ランタイムエラーを診断するのを困難にします。これは悪名高いCOM DLL Hellの問題です。 IIDを変更するとそれが解決され、クライアントコードは古い実装を単に見つけることができなくなります。まだ厄介なエラーですが、少なくとも診断は簡単です。

プレースホルダは、マイクロソフトがインターフェイスに新しいメソッドを追加するのを許可しますが、テーブルレイアウトを 破らないようにします。したがって、インタフェースの名前を変更してインタフェースIIDを再割り当てする必要はありません。したがって、アドインベンダーがアドインを再コンパイルすることはありません。新しいアドインが古いインタフェース実装を使用しようとしない限り、それはまだ動作しません。しかし、厄介なAccessViolationの代わりにまともな例外メッセージのためのオッズ。

6
追加された