VCからVBのDLLを参照したい

[戻る]
ふぁいん 2011/04/23(土) 23:58:42
環境
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"が入らない。
}

ふぁいん 2011/04/24(日) 10:53:58
[[解決]]
自己解決できました。
お騒がせして申し訳ありませんでした。
「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();

}

古いスレッドには追加発言できません。