掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ExceLVBAの構造体をC++で作成したDLLに受け渡すには? (ID:59220)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お疲れ様です 現在Excel2000とVc6を使用して作業をしています。 今回ExcelVBAからVc6で作成したDllに構造体のデータを受け渡す 実装が必要になりました。MSDNやこちらの過去ログでdouble型を 使用しなければ受け渡せる用になったのですが、double型のデータを 下記例の用に構造体に使用すると正しく受け渡せなくなってしまいます 何か受け渡しの方法に間違い等ありましたらご指摘のほうよろしく お願い致します [VB側] Public Type tagCPPSTRUCT bl As long dbl1 As Double cp As String dbl2 As Double End Type Public Declare Function sampletest1 Lib "webTestDll.dll" ( l() As tagCPPSTRUCT) As Long Dim Data(3) As tagCPPSTRUCT Data(0).bl = True Data(0).dbl1 = 0.0001 Data(0).dbl2 = 0.0002 Data(0).cp = "AAAAA" Data(1).bl = False Data(1).cp = "BBBBB" Data(1).dbl1 = 0.00001 Data(1).dbl2 = 0.00002 Data(2).bl = True Data(2).cp = "CCCCC" Data(2).dbl1 = 0.000001 Data(2).dbl2 = 0.000002 Call sampletest1(Data) [VC側] typedef struct tagVBSTRUCT{ long bl; double dbl1; BSTR cp; double dbl2; }VBSTRUCT; __declspec(dllexport) long __stdcall sampletest1( LPSAFEARRAY *ppsa ) VBSTRUCT employee; LPSAFEARRAY psa = *ppsa; long idx[1], lb, ub; SafeArrayLock(psa); SafeArrayGetLBound(psa, 1, &lb); SafeArrayGetUBound(psa, 1, &ub); for (idx[0] = lb; idx[0] < ub; idx[0]++) { SafeArrayGetElement(psa, &idx[0], &employee); ・ ・ ・ double型を使用しなければSafeArrayGetElement後「employee」に 値が入るのですが、double型を使用するとdouble型以降のメンバは すべて値がおかしくなってしまいます。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.