.Net作成されたDLLをCOMとして使えるように、以下とステップ:
① .netでDLLを作成する。
VS2005などIDEで行う。
② CMDよりregasm.exeでDLLファイルの型をレジストする。
CMD例:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe Wxg.dll /tlb /codebase
注意点: /tlbが必要です、これがあればWxg.tlbファイルを生成できます。
後でEXCELのVBAやVB6のIDEの参照メニューからtlbファイルを参照する必要です。
直接wxg.dllを参照するのはできないです。
/codebaseは署名に関するものです、なくても大丈夫そうです。
逆にあったら、署名ファイルを提供する必要です。
③ EXCELのVBAやVB6の「参照設定」からWxg.tlb を読み込む。
これでVBの統合開発環境上で各クラスを呼び出す準備が整った事になる。
④ VB6ソースの中で、Dimで変数を宣言して使える。
ただ補完機能ができないです。
できるようにするにはClassInterface属性にClassInterfaceType.Noneを設定する。
例:
[ClassInterface(ClassInterfaceType.None)]
public class GroupReplace : IReplacer
さらにVB6中で.net DllのEventも使えようとすると、
先に.netのEvent interfaceを宣言しなければなりません。
例:
public delegate void ReplaceEventHandler( string name );
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
public interface ReplaceEvents
{
void Replaced( string input, string format );
}
次にComSourceInterfaces属性を使ってクラス側にそのインターフェイス名を指定する。
[ComSourceInterfaces("Wxg.ReplaceEvents, Wxg")]
[ClassInterface(ClassInterfaceType.None)]
public class GroupReplacer: IReplacer
{
public event ReplaceEventHandler Replaced;
}
ComSourceIntarfaces属性値の引数は、最初がイベント用に定義したインターフェイス名、
二番目がそのインターフェイスが存在するアセンブリ名である。
これでVB6からイベントを利用できるようになる。
⑤ 一回でRegasmでレジストした後、また.netソースが改修しても再びRegasm不要のため
dllのClassIDを固定GUIDで設定すればOKです。
GUIDの生成はVS2008のTOOLsメニューGUID生成からできます。
没有评论:
发表评论