まずはクラスライブラリとしてプロジェクトを作成します。
プロジェクトのプロパティでアプリケーションタブ内のアセンブリ情報から「アセンブリをCOM参照可能にする」にチェックを入れます。
あとは、コンパイルタブの「COM相互運用機能の登録」にもチェックを入れておくと、デバッグとかが楽かも。
プロジェクトにクラスを足すときは、「COMクラス」を使うのがお勧めです。
次に、COMの確認。
VBSファイルを作ってやるとか、VB6を使うとか、CraeteObjectで呼んでみるとかがありますね。
Dim obj
Set obj = CreateObject("ClassLibrary1.ComClass1")
MsgBox o.MethodTest()
こんな感じですかね。
後は、VSの入っていない環境にCOMを設定する方法。
WinXPとFramework 2.0の場合で具体例で書きます。
コマンドプロンプトで「C:\WINDOWS\Microsoft.Net\Framework\v2.0.50727」に移動します。
でコマンド「regasm [DLLの絶対パス] /tlb /codebase」を実行します。
ワーニングが出ますが成功って感じです。
このコマンド、「/codebase」をつけないとうまくいかないんですよね。
/codebaseをつけないと、登録しただけではうまく動かなくて、/unregisterするとうまくいって。。。
色々やりすぎて原因不明です。このまま迷宮に入れておきます。
メソッドの修正とかしてもモジュールを上書きするだけでOKです。
(クラスの追加、削除は再登録がいるかも?)
これがアセンブリの著名をつけない時のメリットですね。
アセンブリの著名をつけちゃうと、GACに登録はされますが、
バージョン管理をきっちりやる必要が出てきます。
ちょっとやってみたんですけど、バージョンダウンして動かすことが出来ませんでした。
これはそのうち解決したいです。
以下はその他の気になった点のメモです。
・Object型をCOM公開すると警告(BC42102)が出るが問題なし
→プロジェクトファイルに以下の文を追加で出なくなる
+Project
+PropertyGroup
・オーバーロードと可変引数は使えない
・自作クラスを継承したクラスがうまく公開できない(たぶん個人的な知識不足が原因)
・・・いつか、この記事をまとめなおそう。。。
0 件のコメント:
コメントを投稿