プログラムを始めてまだ期間が短い私ですが、
タイトルの通り、VB6.0で作成されたDLLファイルを、VC++.NETの環境で
作成したアプリケーションから呼び出そうとしていますが、ソースファイル
のコンパイルは上手くいっても、リンクのところでエラーメッセージが
出てしまいます。
ネット上にはを「VBで作成可能なのはActiveX DLLである」というような事
が書いてありましたが、何か関係があるのでしょうか?
解決する方法がありましたら、教えて下さい。
以上、宜しくお願いします。
VB 6.0 で作れる DLL は、ActiveX DLL です。
ActiveX というのは COM を拡張した技術であり、VC++ から呼び出そうとするなら、COM の流儀にのっとって呼ばなければなりません。
VC++ で DLL を作ると、好きな名前の関数を外部に公開できますが、ActiveX DLL が外部に公開している関数は以下の4つだけです。
・DllGetClassObject
・DllcanUnloadNow
・DllRegisterServer
・DllUnregisterServer
VB 6.0 の関数を呼びたければ、
1:DllGetClassObject で IClassFactory を作成し
2:IClassFactory::CreateInstance で、VB 6.0 で作ったクラスモジュールのインスタンスを作成し
3:そのインスタンスの IDispatch インターフェイスを取得し
4:IDispatch のメソッド経由で VB 6.0 のメソッドを呼ぶ
という流れになる…のかな?
(ActiveX については浅学で申し訳ない)
まぁ、手順は書いてみましたが、何のことかわからないかと思います。
興味があったら COM について調べてみてください。
面倒くさそうだったら、諦めたほうがいいと思います。よほどの理由が無い限り、頑張って実現しても手間に見合った成果はないかと…
シャノンさん、ご回答ありがとうございます。
VB 6.0に限定しての話で進めておりますが、
もし、VB 6.0よりバージョンが新しいものであれば
解決できる…なんてことはあるのでしょうか?
VB 6.0 の次は VB 7.0(VB.NET 2002)ですが、こいつでも VC++ から呼び出せる DLL は作れません。
今度は ActiveX DLL ではなく .NET DLL になってしまいます。
残念ながら「VC++ で作れる Win32 DLL は、VB ではどのバージョンであろうと作れません」という回答になります。
ただし、VC++ の側も .NET にあわせれば、VC++.NET で作った .NET アプリから、VB.NET で作った .NET DLL を呼び出すことは可能です。
シャノンさん、ご回答ありがとうございます。
参考になりました。
また、この話題で進展がありましたら教えて下さい。
ツイート | ![]() |