VBA-DLLの引数受け渡しについて
皆様こんにちは
VCでDLLを作成し、VBAからString配列を表データでわたし、DLLにて抽出後
VBAに戻す処理を作成しています。
VCよりデバッグ実行すると発生しないのですが
VBAから実行するとたまにですが落ちてしまいます。
又、偶然かもしれませんがDLLをリリースモードにしたときしか落ちません。
以下の様なコードを作成し実行しているのですが、
問題があれば御指摘いただければありがたいです。
VCはVer6です。
void WINAPI foo
(LPSAFEARRAY FAR* inData, //VBAよりわたされるString配列
LPSAFEARRAY FAR* outData) //VBAへ返すString配列
{
BSTR inElment;
BSTR outElment;
long inIdx[2];
long outIdx[2];
char data[256];
for(行数分ループ) {
for(列数分ループ) {
//データ獲得処理
//inIdx[0],inIdx[1]にはinData配列へのインデックスが入ります。
SafeArrayGetElement(inData, inIdx, &inElement);
lstrcpy(data,(LPCTSTR)inElement);
SysFreeString (inElement);
;
//データを返す処理
//outIdx[0],outIdx[1]にはoutData配列へのインデックスが入ります。
element2 = SysAllocString((BSTR)data);
SafeArrayPutElement(*outData, outIdx, outElement);
SysFreeString (outElement);
}
}
}
尚VBA側は
宣言を
Public declare ・・・・ foo(ByRef indata() as string, ByRef outData() as string)
としています。
各引数はRedimにて確保しています。
LPSAFEARRAY型変数や
それに関係する関数
SysAllocStaring,SafeArrayGetElement,SafeArrayPutElement,SysFreeString
の使い方に間違いがあるのでしょうか?
よろしくお願い致します。