
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)と何が異なるのでしょうか。
よろしくお願いします。
No.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) を経由することもありません。
今まで無駄な作業をしていました。誤りに気付いてよかったです。
(A)ということが分かりましたので今後迷わなくて済みます。
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
VC++の外部依存関係
-
同じ名前のファイルを作った場...
-
csvファイルを開かずに文字を検...
-
グローバル変数のよくない使い...
-
VBAにてEXCEL以外のファイル(テ...
-
ファイル名の先頭にアンダース...
-
バッチで118項目のCSVを処理し...
-
ファイルを記録してあるセクタ...
-
fopenの"r+"モードで同時に読み...
-
fopenできる上限の変更
-
2つのファイルを比較するC言語...
-
COBOLでの可変長定義について
-
マスタとファイルの違いって?
-
C言語のfopenについて教えてく...
-
c言語のfeof関数はどういう関数?
-
VB.NETによるプロセス間通信
-
Visual Stadio2008でjarファイ...
-
分割コンパイルの#defineについて
-
iniファイルのデータ結合に関す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
VB.NETによるプロセス間通信
-
営業秘密の漏洩について
-
Thunderbirdでemlファイルを開...
-
ドラッグアンドドロップでファ...
-
CSVファイルへの保存の際、デー...
-
バッチで118項目のCSVを処理し...
-
SGファイルって何ですか?
-
ファイルの結合
-
分割コンパイルの#defineについて
-
VBAにてEXCEL以外のファイル(テ...
-
2つのCSVファイルの比較
-
ShellExecuteEx→WaitForSingleO...
-
VBに、Cのincludeのようなもの...
-
RPGでファイル名(もしくはレコ...
-
マウスポインタの変更
-
Excelマクロでの再読込み方法
-
関数の呼び方について
おすすめ情報