環境
VC++6(MFC),VB6, WinXP SP3
VBで作成したDLLをVCから参照できないのですが、ご存知の方がいましたら
アドバイスをお願い致します。
ソースコードは以下のようになっておりまして、末尾に記載してありますように
参照できていません。
何か足りないのでしょうか、または、やり方が違うのでしょうか?
<VB> Project1.dll (クラス名: Class1)の中身
Public Function Test_func() As String
Test_func = abc123
End Function
<VC>
Project1.dllをクラスウィザード->クラスの追加->タイプライブラリからインポート
すると、_Class1クラスが生成される。これを使ってVBの関数を参照する。
// ------------- project1.h -------------
class _Class1 : public COleDispatchDriver
{
public:
_Class1() {} // COleDispatchDriver デフォルト コンストラクション
_Class1(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
_Class1(const _Class1& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
public:
CString Test_func();
};
// ------------- project1.cpp -------------
CString _Class1::Test_func()
{
CString result;
InvokeHelper(0x60030000, DISPATCH_METHOD, VT_BSTR, (void*)&result, NULL);
return result;
}
// ------------- aaaaaDlg.cpp -------------
void aaaaaDlg::OnButton1()
{
CString bbb;
_Class1 myClass;
bbb = myClass.Test_func(); // ←bbbは"。VB側の値abc123が入らない。
}
自己解決できました。
お騒がせして申し訳ありませんでした。
「MFC ラッパクラス」でネット検索したらほしい情報が見つかりました。
(1週間掛かりましたが、やっと解決です。\(^o^)/
CreateDispatch がないのが原因でした。
ソースは以下の通りです。
ちなみに、COMの初期化・終了処理は他の場所で記述していましたが、
分かりやすくするため、同じ場所にしておきます。
// ------------- aaaaaDlg.cpp -------------
void aaaaaDlg::OnButton1()
{
CString bbb;
_Class1 myClass;
CoInitialize(NULL);
myClass.CreateDispatch (Project1.Class1);
bbb = myClass.Test_func();
CoUninitialize();
}