.NETで作成したDLLをVB6から呼び出す方法
用語解説
COMオブジェクト
COMコンポーネント=ActiveX
アセンブリ
.NetFrameworkで作成されたオブジェクト
GUID
GlobalUniqueIdentifier
世界中で一意な識別子。
MACアドレス等。
単にGUIDと呼ぶ場合は、WindowsにおけるオブジェクトのクラスIDを指す。
コーディング(.Net側)
DLLとしてコンパイル(ビルド)する。⇒test.dll
using System.Runtime.InteropServices;
namespace nsFromVB6
{
[ComVisible(true)]
public interface INmcTagger
{
string ReturnMessage();
}
[ClassInterface(ClassInterfaceType.None)]
public class clsFromVB6 : INmcTagger
{
public string ReturnMessage()
{
return @"VB6からの呼びだし成功";
}
}
}
.Net側設定
(1) [プロジェクト]-[XXX のプロパティ]-[アプリケーション]タブの[アセンブリ情報]
「アセンブリを COM 参照可能にする」にチェックを入れておく
(2) ビルドにてプラットフォームのターゲットを「x86」とする。
(3) ビルドにて「COM相互運用機能の登録」にチェックをつける。
(4) ビルドにて署名を作成する
COM登録
RegAsm.exeを実行
※COMとして利用できる様にレジストリに登録する
コマンドプロンプトにて.NetFrameworkのインストールフォルダのRegAsm.exeを実行
(例) cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
regasm test.dll /tlb /codebase
※/codebaseを行う為には署名を作成しておくことが必要
VB6からの参照設定
VB6から利用する為にはタイプライブラリ(クラスの型情報ファイル)が必要
※署名を作成している場合は自動で作成されるので不要
コマンドプロンプトにて
tlbexp test.dll
例:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\tlbexp.exe
※test.tlbが作成される
設定後、VB6の「参照設定」からtest.tlb を読み込む。
コーディング(VB6)
Private Sub Form_Load()
Call CallDotNet
End Sub
Private Sub CallDotNet()
On Error GoTo Err_Trap
Dim obj As clsFromVB6
Set obj = New clsFromVB6
Call MsgBox( obj.ReturnMessage )
Exit Sub
Err_Trap:
MsgBox (Err.Description)
End Sub