掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
アクティブXDLLをC++から呼ぶには? (ID:112572)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
非常に苦労しましたがまぐれで?できました。 誰か意味がわかる人がいたら教えてください。 VB側 Public Type tagKDATA name As String End Type Public Type tagDATA data(9) As tagKDATA End Type Public Function test(ByRef data As tagDATA) As Long data.data(0).name = "あいうえお" data.data(1).name = "かきくけこ" data.data(2).name = "さしすせそ" data.data(3).name = "たちつてと" data.data(4).name = "なにぬねの" data.data(5).name = "はひふへほ" test = 1 End Function VC #include "stdio.h" #include "windows.h" #include "ATLBASE.H" #include "objbase.h" #import "Project1.dll" no_namespace named_guids raw_interfaces_only void main(){ USES_CONVERSION; long z; HRESULT hResult; _Class1* pClass1; tagDATA * BstrArray; LPSAFEARRAY psa ; SAFEARRAYBOUND rgb[1]; rgb[0].cElements = 10; rgb[0].lLbound = 0; ::CoInitialize(0); hResult = ::CoCreateInstance((REFCLSID) CLSID_Class1, 0, CLSCTX_INPROC_SERVER, (REFIID) IID__Class1, (LPVOID*)&pClass1); if( ! SUCCEEDED(hResult) ) { printf("ERROR occured = %08x\n", hResult); return ; } psa = SafeArrayCreate(VT_BSTR,1,rgb); if(psa == NULL) { printf("SAFEARRAY作成失敗\n"); return ; } SafeArrayAccessData(psa,(void**)&BstrArray); pClass1->test(BstrArray,&z); printf("%s\n",OLE2T(BstrArray->data[0].name)); printf("%s\n",OLE2T(BstrArray->data[1].name)); printf("%s\n",OLE2T(BstrArray->data[2].name)); printf("%s\n",OLE2T(BstrArray->data[3].name)); pClass1->Release(); SafeArrayUnaccessData(psa); ::CoUninitialize(); } VC側でビルドするとtlhという拡張子のファイルができます。 そのファイルの中にDLL側の引数の型の宣言?が出てきます。 その型はVC側で宣言なしに何故か使用できます。クラスビューには出てきません。 その型を使用すると簡単にできます。 構造体にして引数を配列にしなければうまくいきました。 構造体の中に配列を作ります。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.