DOBON.NET DOBON.NETプログラミング掲示板過去ログ

.NETで作成したDLL?

環境/言語:[win2000pro , vs.net vb6.0]
分類:[.NET]

.NET(vb or C#)で作成したDLLをVB6で参照することはできるのでしょうか?
やりたいことは
↓VB6
[bas]
Declare Function AAA Lib "HELLO.dll" () As string

[form]
Private Sub Command1_Click()
MsgBox (AAA)
End Sub

として、Command1_ClickイベントでHELLOと表示されるような、
DLLを.netで作成するにはどうしたらよいでしょうか?

OSはWin2000PROで
VS.NET2002と VisualStadio6.0を使用しています。
RIEさん、こんにちは

> .NET(vb or C#)で作成したDLLをVB6で参照することはできるのでしょうか?
可能です。

まずC#でWindowsコントロールライブラリでDLLを新規作成します。ここではHelloとして話をすすめます。

そのプロジェクトのプロパティの構成プロパティのビルドにある
COMの相互運用昨日に登録をTrueにします。(これでTLBが登録されるようになります)

UserControl1クラスにpublicのメソッドを作成してビルドします。

public string Hello()
{
return "Hello!";
}


VB6のプロジェクトでは、プロジェクトの参照設定でHelloコントロールを参照するようチェックをつけます。

実際に使用するときは以下のようにして使用します。

Dim test As New Hello.UserControl1
Debug.Print test.Hello

これで"Hello!"がDLLから返ってきます。
追記:
当方.NET2003にて確認したため、2002ではどうなのかわかりません^^;
もしダメだったらごめんなさい〜
ゆさん、こんにちは!!
返信ありがとうございます。

> そのプロジェクトのプロパティの構成プロパティのビルドにある
> COMの相互運用昨日に登録をTrueにします。(これでTLBが登録されるようになります)

私は勉強不足ですねぇ。
恥かしながら、初めて知りました。
といっても、初心者なのでCOMとかTLBとかはわかりませんけど・・
そういうものがあるのだ程度です。

教わったC#をビルドしたところ、
HELLO.DLLとHELLO.TLBが作成されました。
これらのファイルをVB6プロジェクトのフォルダにコピーして
VB6のプロジェクトの参照設定でHELLO.DLLを参照し開くとすると
"指定されたファイルへの参照は登録できません”と警告メッセージがでました。

試しに、作成したDLLをVB.NETで参照設定に追加し、
ボタンクリックイベントで
[VB.NET]
Dim a As New HELLO.UserControl1()
MessageBox.Show(a.Hello)

としたところ、HELLO!と返ってきました。

やり方はあってると思うのですが・・・
.NET2002とVB6は駄目なのかなぁ?
すみませんが、よろしくお願いします。
RIEさん、こんにちは
> 恥かしながら、初めて知りました。
> といっても、初心者なのでCOMとかTLBとかはわかりませんけど・・
> そういうものがあるのだ程度です。
"タイプライブラリ"で検索してみるとTLBが何者なのかわかると思います^^

> 教わったC#をビルドしたところ、
> HELLO.DLLとHELLO.TLBが作成されました。
> これらのファイルをVB6プロジェクトのフォルダにコピーして
> VB6のプロジェクトの参照設定でHELLO.DLLを参照し開くとすると
> "指定されたファイルへの参照は登録できません”と警告メッセージがでました。
参照設定ダイアログでDLLを直接参照したのでしょうか?
C#でビルドしたものが、すでにリストに並んでいるはずですのでリストから探してチェックすればいいだけです。
VB6プロジェクトのフォルダへのコピーも必要ありません。ビルドした時点でTLBのパスがレジストリに登録されています。

ただし、C#でビルドし直すと別物となりますので、再度参照をしなおす必要がありますのでご注意を。


> やり方はあってると思うのですが・・・
> .NET2002とVB6は駄目なのかなぁ?
> すみませんが、よろしくお願いします。
2002でもTLBが作成できる時点でVB6でも使用可能だと思います^^
RIEです!
ゆさん、親切な回答ありがとうござます。

>参照設定ダイアログでDLLを直接参照したのでしょうか?
直接参照してました。リストから選択したところ
HELLO!とかえってきました。
丁寧に書いてくれてありがとうございます。
TLBも検索して勉強したいと思います。

度重なる質問で申し訳ないのですが、
VB6の参照設定でする場合はOKなのですが、参照設定でリストから追加することなく、
VB6のbasでDeclare宣言で同様に処理することは可能でしょうか?

[bas]
Declare Function AAA Lib "HELLO.dll" () As string
AAAには何て書くのかわからないのですが・・・

よくわかってない上にいろいろ聞いてすみません。
RIEさん、こんにちは
> VB6のbasでDeclare宣言で同様に処理することは可能でしょうか?
.NETではDLLエクスポートは出来ないので(たしか^^;)
COMとして登録し、TLB参照で使用するしか無いと思います。
(もし他に方法があったらどなたか教えてくださいm(__)m)

どうしてもdeclare宣言によるDLLインポートとしたいのであれば、VC++で作りましょう。 上記のHello程度のものならあっという間にできますし^^

GoldFishさんに簡単なDLL作成方法がありますので、見てみてはいかがでしょう。
http://www.athomejp.com/goldfish/mfc/dll/csample.asp

DOBON.NET | プログラミング道 | プログラミング掲示板