Interop Forms Toolkit - Visual Studio 2008 (Todd Apley)

前に Interop Forms Toolkit についてブログを書いて以来、時間が経ってしまったことをお詫びします。この件については、常に最新の情報を得るように努めてきましたし、相互運用のフォーラム (英語) でご質問もいただきました。お寄せいただいたメールを読むと、多くの方がこのツールキットを使用して、従来の VB6 アプリケーションをさまざまな方法で拡張することに成功されているようです。今回は、Beth がこちらのサイト (英語) に投稿した channel9 ビデオを少し補足します。

VS 2008 の新機能

ここでは、前述のビデオで取り上げた内容をもう少し詳しくご説明したいと思います。ビデオでは主に、Visual Studio 2008 でこのツールキットを使用する際に注意する必要がある変更点と、開発環境をアップグレードするメリットについてご説明しました。

まず、Visual Studio 2008 を使うメリットについてご説明します。マイクロソフトでテストを担当していると、製品リリースの数年前から新しい技術を試すことができるという役得があります。VS 2005 (またはそれ以前のバージョン) を使っていらっしゃる方には、LINQ や XML リテラルなどの新しい機能を別にしても、VS 2008 にアップグレードするメリットがあると、確信を持ってお勧めすることができます。たとえば、IntelliSense の機能やエディタのパフォーマンスは、これまでにないほど強化されています。私も時折バグの追跡のために以前のバージョンを使うことがありますが、そのたびに、2008 をまだ使っていない方がいらっしゃるのを残念に感じます。ぜひ Express をダウンロードして、試してみてください。

アップグレードのお勧めはこのぐらいにして、VS 2008 で相互運用ツールキットを使用する際の注意点について詳しくご説明します。このツールキットをリリースしたときには VS 2008 がまだベータ版でした。そのため、重要なシナリオの大部分についてはテストを済ませていましたが、このツールキットを完全にテストすることはできませんでした。次の点について注意していただく必要があります。

インストール :

  1. 並行インストール。VS 2005 と VS 2008 の両方をインストールした状態でこのツールキットをインストールすると、VS 2008 に対してはこのツールキットが登録されません。両方のバージョンがどうしても必要な場合は、相互運用のフォーラム (英語) に投稿していただければ解決方法を詳しくご説明します。それ以外の場合は、VS 2008 で両方の種類のプロジェクトを操作できますので、VS 2005 をアンインストールし、このツールキットのセットアップをもう一度実行してください。

.NET コードの開発 :

ツールキットをインストールしたら、通常どおりに相互運用ユーザー コントロール/フォーム プロジェクトを開発できます。ただし、いくつかの点に注意してください。これは、私たちが苦労を繰り返した末に得た教訓です。

  1. ユーザー コントロール プロジェクトを作成するときには、それに固有の名前を付けてから保存してください。そうしないと、COM progID の衝突という現象が発生し、RegFree COM 設定が台無しになることがあります。私は channel9 ビデオの既定の名前をそのまま使ったのですが、アプリケーションを実行しようとしていた別のコンピュータで、同じ名前のプロジェクトを既に作成していたため、channel9 ビデオがほとんど機能せず、びっくりしました。
  2. 使用するフレームワークのバージョン。相互運用ユーザー コントロール/フォーム プロジェクトを作成するときは、使用するフレームワークが 2.0 に設定されます。このため、プロジェクトで LINQ などの機能を使用できません。これを解決するには、コンパイル プロパティ タブ/[コンパイラの詳細設定] ページに移動して、使用するフレームワークのバージョンを 3.5 に変更します。その後で参照リンク system.xml をプロジェクトに追加することが必要な場合もありますが、適切な参照を設定していない場合、通常は VB コンパイラで警告/エラーが表示されます。
  3. こちらの投稿 (英語) で触れたように、ハイブリッド アプリケーションを開発するときにお勧めするのは、相互運用ユーザー コントロールを使用し、microsoft.interopformstools ライブラリは使用しない方法です (アプリケーション イベントの公開やグローバル状態の共有などの機能を利用する場合を除きます)。私がお勧めしたように、コントロールを作成した後でこのアセンブリへの参照を削除し、プロジェクトをコンパイルすると、このアセンブリへの参照がいくつか存在する activexcontrolhelpers.vb ファイルでコンパイラ エラーが発生します。コードから "namespace my" セクション全体を削除すれば、この問題は解決します。もちろん、こうした回避方法には条件がつきもので、この場合も例外ではありません。相互運用ユーザー コントロールを使う方法は、次のような場合にはあてはまりません。
    1. ホスト コントロールと相互運用コントロールとの間での Tab キーを使ったアクセスが重要な場合。これらの場合に Tab キーが機能しないという問題が報告されています。基本的なプロトタイピングを試して、適切に機能するかどうかを確認してください。
    2. 相互運用ユーザー コントロールで DBCS 文字の入力が必要な場合。この操作でバグが報告されていますが、このバグはまだ修正されていません。

その他のバグや問題に遭遇した場合の最も良い解決方法は、相互運用のフォーラムで解決方法を検索するか、質問を投稿することです。必要な場合は、製品サポートでもこのツールキットのサポートを提供しています。

  1. ユーザー コントロール プロジェクトをビルドするときに、コンパイルとビルドが成功したと表示されても、完全には機能しない場合があります。rc.exe を使用してアイコンとマニフェスト情報をアセンブリにコンパイルする、ビルド後の手順があります。この手順のロジックが VS 2008 では機能しません。これは、rc.exe の格納場所が変更されたためです。ビルド後の手順のロジックは、コンパイル プロパティ タブ/[ビルド イベント] ダイアログ ボックスで確認できます。基本的には、このイベントのロジックを調整して、コンピュータ上で rc.exe が格納されている場所を指定するようにすれば、この問題は解決します。次にその例を示します。

"d:\wherever\rc.exe" /r "$(ProjectDir)InteropUserControl.rc"

変更を行った後でプロジェクトを再コンパイルし、この手順が失敗しないことを出力ウィンドウで確認してください。

この設定変更を維持する方法 :

上記の 4 つの手順は難しいものではありませんし、ほとんどの方はこれらのコントロールを何度も開発することはないでしょう。しかし、この設定変更を自動化した方がよい場合は、簡単にそうすることができます。ここでその方法を簡単にご紹介します。詳細な情報が必要な場合は、相互運用のフォーラム (英語) でリクエストしてください。

1.    すべてのプロジェクト設定はさまざまなテンプレート ファイルに格納されます。[ツール] メニューから表示される [オプション] ダイアログ ボックスの [プロジェクトおよびソリューション] で、ユーザー プロジェクト テンプレートの場所とユーザー項目テンプレートの場所を確認して、格納場所を知ることができます。これらの場所に VB6 InteropForm Library.zip ファイルと VB6 UserControl.zip ファイルがあります (プロジェクト項目テンプレートの場所にも同様のファイルがあります)。一般的には次のように操作します。

a.     操作が失敗したときのために、zip ファイルのバックアップを作成します。

b.    zip ファイルを解凍します。

c.     該当する .vbproj ファイルを編集します (頻繁に使用する VS 2008 プロジェクト ファイルから該当する行をコピーし、テンプレートの保存場所にコピーできます)。

d.    ファイルを再び圧縮し、同じ場所に置きます (ファイルに別の名前を付けることもできます)。

2.     VS 2008 を再起動し、新しいテンプレートを選択すると、新しい設定が使用されるようになります。

ここでご説明した手順を簡単に実行でき、お役に立てることを願っていますが、うまく行かない場合はフォーラムでご質問ください。

VB6 からの .NET コントロールの使用 :

これはとても重要な点です。VS 2005 を使う場合でも VS 2008 を使う場合でも、ユーザー コントロール プロジェクトを作成するときにはこの点に注意してください。.NET Framework のバグのため、VB6 ではユーザー コントロール プロジェクトでイベントを同期できませんでした。この問題の回避方法についてはツールキットに含まれているヘルプで説明していますが、このバグが .NET Framework 3.5 または 2.0 SP1 で修正されました (このサイト (英語) から入手可能)。このため、.NET の相互運用コントロールを VB6 の他の ActiveX コントロールを同じように使用できるようになりました。さらに、これによって、以前は不可能だったいくつかの別のシナリオ (.NET ユーザー コントロールをホストする vb6 のユーザー コントロールなど) も可能になりました。ヘルプではこの変更について知ることができないので、注意してください。もちろん、更新プログラムを適用した .NET Framework をクライアントにインストールしている必要があります。ここにデモ コードを書くこともできますが、不要と思うので書きません。VB6 のコントロールに慣れていらっしゃる方は、既に処理方法をご存知だと思います。

Channel9 ビデオでも触れたように、こうしたユーザー コントロール プロジェクトを開発する最もよい方法は、(VS で作成している相互運用プロジェクトから) デバッグ プロパティ ページに移動し、[外部プログラムの開始] を選択し、vb6.exe をローカルに保存している場所を指定することです。その後で F5 キーを押すだけで VB6 が起動し、ブレークポイントの設定などの操作を行うことができます。デモでは忘れていましたが、VS からのデバッグを停止すると、VB6 で未保存の変更内容がすべて失われてしまう点に注意してください。デバッグを停止する前に、必ず変更内容を保存するようにします。

アプリケーションの展開 :

相互運用プロジェクトの展開について理解するのに最も役に立つ記事が、こちらのサイト (英語) にあります。この記事にあるガイドラインに従えば、相互運用アプリケーションを簡単に展開できます。疑問点などがある場合は、相互運用のフォーラム (英語) で検索するか、質問をお寄せください。もちろん、この投稿へのコメントもすべてチェックします。

また、Web 検索をしてみると、このツールキットを使用したユーザーによる多数の興味深い記事が見つかります。たとえば、ユーザー コントロールでの my.settings の使用に関する興味深い記事がこちらのサイト (英語) にあります。

VB6 の有用性

多くの方々が VB6 は過去の製品と感じていらっしゃるでしょうし、VB6 は確実に古びてきていますが、まだまだ利用できると私は考えています。私は一部の内部ツール用に VB6 を定期的に使い続けています。Interop Forms Toolkit を使用すれば、.NET 機能を徐々にアプリケーションに組み込み、既にアプリケーション ロジックに組み込んだ内容を損なうことなく、新しいスキルを学ぶことができます。

この投稿がお役に立てることを願っています。

Toddap_MS

VB チーム

投稿 : 2008 年 3 月 5 日 9:51 AM

分類 : VB6_Migration/InteropTodd ApleyVB2008

VB チームの Web ログ - https://blogs.msdn.com/vbteam/archive/2008/03/05/interopforms-toolkit-visual-studio-2008-edition.aspx (英語) より