
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言語初心者の質問失礼します。
-
vba ActiveSheet.pasteを使った...
-
Cでのネットワークファイルの読...
-
SGファイルって何ですか?
-
読み取り専用ファイル FileStr...
-
BI書、FD書 とは
-
lseekって
-
ファイルの結合
-
fopenできる上限の変更
-
ダイアログボックスで複数フォ...
-
バイナリーとして.wavファイル...
-
グローバル変数のよくない使い...
-
マウスポインタの変更
-
アプリにcsvファイルを読み込ま...
-
テキストファイルの最終行を削...
-
同じ名前のファイルを作った場...
-
パワーポイントの画面表示が点...
-
ファイル名の先頭にアンダース...
-
VBSでファイルを開く
-
ドラッグアンドドロップでファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
vba ActiveSheet.pasteを使った...
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
Thunderbirdでemlファイルを開...
-
テキストファイルの最終行を削...
-
ドラッグアンドドロップでファ...
-
バッチで118項目のCSVを処理し...
-
ダイアログボックスで複数フォ...
-
グローバル変数のよくない使い...
-
VBAにてEXCEL以外のファイル(テ...
-
【C#】リソースファイルの埋め...
-
分割コンパイルの#defineについて
-
CSVファイルへの保存の際、デー...
-
RPGでファイル名(もしくはレコ...
-
SGファイルって何ですか?
-
fopenできる上限の変更
-
マウスポインタの変更
-
Cでのネットワークファイルの読...
-
ASP .NETでファイル選択ダイア...
おすすめ情報