新しい Type Equivalance 機能を最大限に活用して、WPF アプリケーションで MapPoint コントロールをホストする方法。
これは、新しい NoPIA および Type Equivalance 機能に関して、interop assembleis を維持するために何が必要かについての私の別の質問に関連しています。しかし今、実際に機能する実装を取得して、 MapPoint Control ActiveX コントロールに関してこれをどのように使用できるかを示すことに興味があります。
MapPoint 参照に対して Visual Studio のEmbed Interop Typesオプションが True に設定されていることを確認するためのアドバイスに従うことができ、MapPoint.MappointControl を興味深い方法で扱う WPF アプリケーション内で次のようなコードをコンパイルして実行することができました。コンストラクターを持っているかのようにインターフェイスします。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var map = new MapPoint.MappointControl();
if (map.ActiveMap == null)
{
map.NewMap(MapPoint.GeoMapRegion.geoMapNorthAmerica);
}
}
このコードは機能しているように見えるので、COM 呼び出しはすべて舞台裏で適切に行われていると推測していますが、問題は、この ActiveX コントロールをウィンドウのコントロール階層に統合することです。Windows フォームの古い ActiveX イントロプ方法論を使用する場合、通常、ActiveX コントロールを表す ActiveX コントロール ホストが生成されますが、Windows フォーム コントロールでもあり、フォーム内または WPF アプリケーションの WindowsFormsHost 内でホストすることができます。 . これまでの私の調査によると、 HwndHostから継承するクラスを作成することで、MapPoint コントロールを WPF で直接ホストできるようです。クラス。ただし、Windows フォームの方法論が相互運用アセンブリ内で無料で生成するために使用したものを複製するには、多くの作業が必要になるようです。新しい Type Equivalence 機能を使用すると、コントロールをインスタンス化するだけでなく、これらのコントロールを WPF または Windows フォーム アプリ内に直接統合することもほとんど問題なくできると思いました。
何か不足していますか?そうでない場合、WPF アプリで MapPoint コントロールを利用するための最も健全な方法は何ですか? Windows フォームの開発で使用していた古い相互運用機能アセンブリを Visual Studio または TlbImp.exe ユーティリティで生成しないようにすることをお勧めします。
ところで、タイプ ライブラリをインポートするさまざまな方法に関する詳細をいくつか見つけましたが、それが私の状況にどのように適用されるかはよくわかりません。