環境
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();
}

 
  
  
  
  