掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
アクティブXDLLをC++から呼ぶには? (ID:112566)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
作ってみましたがうまくいきません。 アクティブXDLL(VB6.0) //////////////////////////////////////////////////// Public Function test(ByRef Data() As String) As Long Data(0) = "あ" Data(1) = "い" Data(2) = "う" Data(3) = "え" Data(4) = "お" test = 1 End Function ///////////////////////////////////////////////////// 呼び出しVC6.0 // C++から COMコンポーネントにアクセスする // (C)Yajima, Satoshi #include "stdio.h" #include "windows.h" #include "ATLBASE.H" #include "objbase.h" //#include <tchar.h> //project1.dllを元に、必要な定義ファイルを生成する #import "Project1.dll" no_namespace named_guids raw_interfaces_only // メイン処理 void main(){ USES_CONVERSION; long z; //プロシージャの引数、戻り値用 HRESULT hResult; // COM 戻り値用変数 _DBClass* pClass1; // DLLのオブジェクト名 // BYTE * k[100]; BSTR * BstrArray[12150]; VARIANT data; SAFEARRAY * psa ; SAFEARRAYBOUND rgb[1]; rgb[0].cElements = 12150; // 作成するSAFEARRAYの要素数 = 32 rgb[0].lLbound = 0; // 作成するSAFEARRAYの添字の下限値 = 0 ZeroMemory(&data,sizeof(data)); // COMの初期化 ::CoInitialize(0); // インスタンスの作成(CLSIDとIIDを指定して、ポインタ pClass0 を取得) // [VB] Set obj = New Project1.Class1 hResult = ::CoCreateInstance((REFCLSID) CLSID_DBClass, 0, CLSCTX_INPROC_SERVER, (REFIID) IID__DBClass, (LPVOID*)&pClass1); if( ! SUCCEEDED(hResult) ) { printf("ERROR occured = %08x\n", hResult); } psa = SafeArrayCreate(VT_BSTR,1,rgb); // SAFEARRAY作成 if(psa == NULL) // SAFEARRAY作成結果判定 { printf("SAFEARRAY作成失敗\n"); return ; } // 作成したSAFEARRAYのポインタ取得及びロック SafeArrayAccessData(psa,(void**)&BstrArray); pClass1->test(&psa,&z); printf("%s\n",OLE2T(*BstrArray[0])); printf("%s\n",OLE2T(*BstrArray[1])); // 終了処理 pClass1->Release(); SafeArrayUnaccessData(psa); // SAFEARRAYアンロック // COMの終了処理 ::CoUninitialize(); }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.