プロが教えるわが家の防犯対策術!

Visual Studio 2010で、VB.NETのクラスライブラリを作成して、.NETとCOMの両方で使用しているのですが以下のことがよく分かりませんので教えてください。

同じプロジェクトのDLLファイルをVB.NETなどから.NET用のDLLとして使っているだけでなく、VBAなどからもCOM用のDLLとして使っているのですが、プログラムに変更があると、COM相互運用機能の登録がONの場合とOFFの場合の両方で2回ビルドして各々のDLLファイルを別に用意して使い分けていました。しかし、先日、COM相互運用機能の登録をONにしてビルドしたDLLでもVB.NETなどから.NET用のDLLとして参照できてしまうことが分かりました。.NET用のDLLとして利用する場合には、COM相互運用機能の登録をON,OFFに関係なくどちらでビルドしたDLLファイルでも使用できるのでしょうか。たまたま今は参照できているだけで将来的には使えなくなる可能性があるので、.NET用のDLLとして使用する場合には、COM相互運用機能の登録をOFFにしてビルドしたDLLを使用するべきなのかがよく分かりません。つまり、下記の(A)と(B)のどちらが正しいのかがよく分かりませんので教えてください。

(A) VB.NETとして使用する場合には、COM相互運用機能の登録をON,OFFに関係なく、どちらでビルドしたDLLファイルでも使用できるが、COMとして利用する場合には、COM相互運用機能の登録をONにして、ビルドして作成したDLLファイル(.dll)とタイプ ライブラリ ファイル(.blt)を使用する。VB.NETとしてもCOMとしても利用する場合には、COM相互運用機能の登録をONの方だけビルドすればよい。

(B) VB.NETとして利用する場合には、COM相互運用機能の登録をOFFしてビルドしたDLLを使用する。COMとして利用する場合には、COM相互運用機能の登録をONにしてビルドして作成したDLLファイル(.dll)とタイプ ライブラリ ファイル(.blt)を使用する。VB.NETとしてもCOMとしても利用する場合には、COM相互運用機能の登録をON,OFFの両方で2度ビルドする必要がある。

なお、(A)が正しい場合にのみ、分かる範囲でいいので教えてほしいのですが、
コードを何も変更しないでビルドしてもDLLファイル(.dll)は更新されませんが、COM相互運用機能の登録のONとOFFを変更するだけでDLLファイル(.dll)は更新されています。COM相互運用機能の登録をONにしてビルドして作成されたDLLファイル(.dll)は、COM相互運用機能の登録をOFFにしてビルドして作成されたDLLファイル(.dll)と何が異なるのでしょうか。

よろしくお願いします。

A 回答 (1件)

(A)です。


プロジェクトのプロパティのCOM相互運用機能というのは,単純にアセンブリのComVisible属性の引数を変更する役割しかありません。
これは,AssemblyInfo.vbの中に記述があります。
また,ComVisible属性はクラス単位で設定できるため,アセンブリのComVisibleがFalseであっても,
特定のクラスのみCOMに公開することができます。

MSDN: ComVisibleAttribute クラス (System.Runtime.InteropServices)
http://msdn.microsoft.com/ja-jp/library/system.r …

ComVisible属性の引数がTrueであろうとFalseであろうと,アセンブリであることには変わりがないので,
.NET Frameworkから利用する場合にランタイム呼び出し可能ラッパー (RCW) を経由することはありませんし,
そのアセンブリが.NET Frameworkのメソッドを呼び出すのにCOM呼び出し可能ラッパー (CCW) を経由することもありません。
    • good
    • 0
この回答へのお礼

今まで無駄な作業をしていました。誤りに気付いてよかったです。
(A)ということが分かりましたので今後迷わなくて済みます。
回答ありがとうございました。

お礼日時:2012/11/08 12:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています