ActiveX コントロールのバージョン情報を 2 桁にすると Visual Studio 2010 以降ではイベントが表示されない

こんにちは、Visual Studio サポート チームです。

今回は ActiveX コントロールを Visual Studio で開発した場合に、コントロールのバージョンを 2 桁に設定した場合に発生する現象とその対処方法についてお伝えします。

 

現象

ActiveX コントロールを Visual Studio 2010 のデザイナー画面上に配置し、コントロールのプロパティを表示します。

その際、コントロールのバージョンが “1.10” のように 2 桁の数値を含む場合に、コントロールに定義されているイベントを表示できない場合があります。

本現象は Visual Studio 2010 以降のバージョンで発生いたします。

以下のように、コントロールのプロパティからイベント (雷マーク) を選択した場合に、登録されたイベントが存在した場合も表示されません。

プロパティ

 

原因

本現象は、Visual Studio IDE (統合開発環境) が対象の ActiveX コントロールのバージョン情報をレジストリから読み込む際に、コントロールのバージョン情報を 16 進数表記と仮定して扱う不具合に起因して発生いたします。

弊社製品の不具合でご迷惑をおかけいたしますこと、深くお詫び申し上げます。

 

対処方法

以下のレジストリに登録されているコントロールのバージョンを表す数値を、2 桁以上の場合には 16 進数表記に変更してください。

OCX の情報は以下のレジストリに登録されます。

  [HKEY_CLASSES_ROOT\CLSID\{< OCX のCLSID >}\Version]

64 ビット PC 上で 32 ビットのアセンブリを登録する場合は、OCX の情報は以下のレジストリに登録されます。

  [HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{< OCX のCLSID >}\Version]

  ※ < OCX のCLSID > は 製品ごとの CLSID 値となります。

CLSID は登録した DLL 名などで CLSID 配下を検索することでご確認いただけます。

バージョンが “1.10” の場合は、 “1.a” と修正し、Visual Studio のデザイナー上で再度コントロールを追加します。

プロパティ ウィンドウ上のイベントが表示されることをご確認ください。

なお、本設定は Visual Studio 2010 以降のバージョンで発生する現象であり、Visual Studio 2008 以前のバージョンで開発されている場合は該当いたしません。

また、今後のバージョンで本不具合が修正された場合は、お手数ですが、バージョン情報を 16 進数表記から 10 進数表記に戻してご利用ください。

レジストリ

 

サンプル スクリプト

レジストリ値を 10 進から 16 進、16 進から 10 進に変更するための スクリプトのサンプルをご案内いたします。
スクリプト ファイルは本 blog 末尾の Script.zip にて取得可能です。

※ レジストリへの書き込みを行うため、スクリプトは管理者権限で起動したコマンド プロンプトから実行する必要があります。

 

スクリプト (1) : ConvDecToHex.vbs

バージョン情報を 10 進から 16 進へ変換し、再設定します。エラー処理は行わず、エラーが発生するとメッセージを出力し終了します。

コマンド例:

  Cscript ConvDecToHex.vbs <引数1:必須> <引数2:任意>

コマンド ライン引数:

  <引数1> : {OCX のCLSID} (必須パラメータ)

  <引数2> : d.d (OCXバージョンの (メジャーバージョン.マイナーバージョン) を 10 進数で指定)

 

スクリプト (2) :  ConvHexToDec.vbs

バージョン情報を 16 進から 10 進へ変換しレジストリへ値を設定します。エラー処理は行わず、エラーが発生するとメッセージを出力し終了します。

コマンド例:

  Cscript ConvHexToDec.vbs <引数1:必須> <引数2:任意>

コマンド ライン引数:

  <引数1> : {OCX のCLSID}

  <引数2> : x.x (OCX バージョンの (メジャーバージョン.マイナーバージョン) を 16 進数で指定)

 

※ ご注意事項 ※

サンプル スクリプトは説明の為の部分コードであり、エラー処理などは実装されておらず弊社にてその動作を保証するものではありません。ご使用の際には、ご利用の環境に合わせて適宜修正し、十分なテストを実施してくださいますようお願い致します。

サンプル内で使用しております API などの詳細な情報に関しては、MSDN 、PlatformSDK などをご参照ください。 Script.zip