Windows フォームとアンマネージド アプリケーションの概要
Windows フォーム のアプリケーションとコントロールは、アンマネージド アプリケーションと相互運用できますが、いくつかの注意事項があります。 次のセクションでは、Windows フォームのアプリケーションとコントロールでサポートされるシナリオと構成、およびサポートされていないシナリオと構成について説明します。
Windows フォーム コントロールと ActiveX アプリケーション
Microsoft Internet Explorer と Microsoft Foundation Classes (MFC) を除き、ActiveX コントロールをホストするように設計されたアプリケーションでは、Windows フォーム コントロールはサポートされません。 Visual Studio .NET 2003 より前のバージョンの Visual Studio の ActiveX テスト コンテナーなど、ActiveX コントロールをホストできるその他のアプリケーションおよび開発ツールは、Windows フォーム コントロールのホストではサポートされていません。
これらの制約は、コンポーネント オブジェクト モデル COM 相互運用機能を使用した Windows フォーム コントロールの使用にも適用されます。 COM 呼び出し可能ラッパー (CCW) を介した Windows フォーム コントロールの使用は、Internet Explorer でのみサポートされています。 COM 相互運用の詳細については、次を参照してください。
次の表は、Windows フォーム コントロールで使用可能な ActiveX ホスティング のサポートを示しています。
Windows フォームのバージョン | 支える |
---|---|
.NET Framework バージョン 1.0 | Internet Explorer 5.01 以降のバージョン |
.NET Framework バージョン 1.1 以降 | Internet Explorer 5.01 以降のバージョン Microsoft Foundation Classes (MFC) 7.0 以降 |
ActiveX コントロールとしての Windows フォーム コンポーネントのホスト
.NET Framework 1.1 では、MFC 7.0 以降のバージョンを含むようにサポートが拡張されました。 このサポートには、MFC 7.0 以降の ActiveX コントロール コンテナーと完全に互換性のあるコンテナーが含まれます。
ただし、ActiveX コントロールとしての Windows フォーム コントロールの登録はサポートされていません。 また、Windows フォーム コントロールの com.ms.win32.Ole32.CoCreateInstance
メソッドの呼び出しはサポートされていません。 Windows フォーム コントロールのマネージド アクティブ化のみがサポートされています。 Windows フォーム コントロールを作成したら、ActiveX コントロールと同様に MFC アプリケーションでホストできます。
アンマネージ アプリケーションで Windows フォーム コントロールを使用するには、アンマネージ CLR ホスティング API を使用して CLR をホストするか、C++ 相互運用機能を使用する必要があります。 C++ 相互運用機能を使用することをお勧めします。
COM クライアント アプリケーションの Windows フォーム
Visual Basic 6.0 アプリケーションや MFC アプリケーションなどの COM クライアント アプリケーションから Windows フォームを開くと、フォームが予期せず動作する可能性があります。 たとえば、Tab キーを押しても、フォーカスはコントロール間で変わりません。 コマンド ボタンにフォーカスがあるときに Enter キーを押すと、ボタンの Click イベントは発生しません。 また、キーストロークやマウスアクティビティで予期しない動作が発生する可能性があります。
この動作は、Windows フォームが正常に動作するために必要なメッセージ ループ のサポートをアンマネージド アプリケーションが実装していないために発生します。 COM クライアント アプリケーションによって提供されるメッセージ ループは、Windows フォーム メッセージ ループとは根本的に異なります。
アプリケーションのメッセージ ループは、スレッドのメッセージ キューからメッセージを取得して変換し、処理するアプリケーションに送信する内部プログラム ループです。 Windows フォームのメッセージ ループには、Visual Basic 6.0 アプリケーションや MFC アプリケーションなどの以前のアプリケーションが提供するメッセージ ループと同じアーキテクチャはありません。 メッセージ ループに投稿されたウィンドウ メッセージは、Windows フォームが想定する方法とは異なる方法で処理される場合があります。 そのため、予期しない動作が発生する可能性があります。 一部のキーストロークの組み合わせが機能しないか、一部のマウス アクティビティが機能しないか、一部のイベントが想定どおりに発生しない可能性があります。
相互運用性の問題の解決
これらの問題を解決するには、Application.Run メソッドを使用して作成された .NET Framework メッセージ ループにフォームを表示します。
COM クライアント アプリケーションから Windows フォームを正しく動作させるには、Windows フォーム メッセージ ループで実行する必要があります。 これを行うには、次のいずれかの方法を使用します。
Form.ShowDialog メソッドを使用して、Windows フォームを表示します。 詳細については、「方法: ShowDialog メソッドを使用して Windows フォームを表示して COM 相互運用をサポートする」を参照してください。
新しいスレッドに各 Windows フォームを表示します。 詳細については、「方法: 独自のスレッドに各 Windows フォームを表示して COM 相互運用をサポートする」を参照してください。
参考
- Windows フォームとアンマネージド アプリケーション
- COM 相互運用
- .NET Framework アプリケーションにおける COM 相互運用性
- COM 相互運用性のサンプル
- Aximp.exe (Windows フォーム ActiveX コントロール インポーター)
- .NET Framework コンポーネントを COM に公開する
- COM 用アセンブリのパッケージ化
- アセンブリを COM に登録する
- 方法: ShowDialog メソッドを使用して Windows フォームを表示して COM 相互運用をサポートする
- 方法: 各 Windows フォームを独自のスレッド に表示して COM 相互運用をサポートする
.NET Desktop feedback