Google Earth(GE)プラグインを組み込んだWinForms C#アプリケーションがあります。これは、COM Interop経由で、Google Earthプラグインへの参照を追加することによって行われます。Google Earthプラグインで動作するようにタイプ同値化できません
私たちができることを望むのは、アプリケーションを配備する際にGE Pluginの異なるバージョンをサポートすることです。そこで、我々は開発マシン上のGE Pluginのバージョン5.0に対するアプリケーションを参照して構築し、バージョン6.0のGE Pluginがインストールされている別のマシンに展開し、アプリケーションをタイプ同値性を使って実行させます。
C#4.0に含まれているタイプエンベディングとタイプ同値の理解から、これはまさにタイプ等価アドレスです。しかし、私はこれを動作させることができませんでした。
私は、Visual Studio 2010のGoogle Earthプラグイン5.2への参照をCOMリファレンスとして追加します。 「Interop Interplacement Types」を選択します
次に、6.0 GE Pluginがインストールされたマシンでアプリケーションを実行します。
私はGEが
private IGEPlugin ge;
のように定義されたコード
string pluginVersion = ge.getPluginVersion();
の次の行を実行し、例外を得る「IGEPlugin」はGEプラグインDLLのCOM相互運用機能によって定義されたインターフェースであります。
System.AccessViolationExceptionがユーザーコードによって処理されませんでした。 メッセージ=保護されたメモリを読み書きしようとしました。これは、>他のメモリが壊れていることを示す場合があります。
逆転したときに例外が異なる
(バージョン5.2に対して実行し、6.0でビルド)
コードとアプリケーションの作業罰金構築され、GEプラグインの同じバージョンに対して実行しました。
MSDNのドキュメントから、私は何が不足しているかわからないので、自動的に動作するはずです。私はすべてのインテリセンスを失う、と変更する必要がありますので、私は本当に、GEプラグインのバージョン間の互換性を得るために、C#4.0どこでも「動的」の使用に切り替えることを避けるために期待していた
Type Equivalence and Embedded Interop Types
コードの多く。
http://code.google.com/p/winforms-geplugin-control-library/ – Fraser