Всем привет
есть метод в ActiveX длл-ке на С++:
X++:
[SIZE=2]STDMETHODIMP CctrlATL5::GetArt(LONG _slatNum, LONG _pieceNum, BSTR* _art)
{[/SIZE][SIZE=2][/SIZE][SIZE=2]TCHAR * pS;
pS = pJInterface->getArt(_slatNum, _pieceNum);
wcscpy_s(([/SIZE][SIZE=2][COLOR=#0000ff]wchar_t[/COLOR][/SIZE][SIZE=2]*)_art, MAX_NAME, pS);
[/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] S_OK;
}
[/SIZE]
как видно, в передаваемый в функцию указатель копируется (wcscpy_s) некоя строка из ActiveX.
собственно, вызываем его в Аксапте:
X++:
str GetArt(int _slat, int _piece)
{
COMDispFunction funcDisp;
COMVariant var1, var2, var3;
str artRet;
;
funcDisp = new COMDispFunction(comJ, "GetArt", COMDispContext::Method);
var1 = new COMVariant(COMVariantInOut::IN, COMVariantType::VT_INT);
var2 = new COMVariant(COMVariantInOut::IN, COMVariantType::VT_INT);
var3 = new COMVariant(COMVariantInOut::Out_retVal, COMVariantType::VT_BSTR);
var1.int (_slat);
var2.int (_piece);
var3.bStr(artRet);
funcDisp.call(var1, var2, var3);
funcDisp.finalize();
var1.finalize();
var2.finalize();
var3.finalize();
return artRet;
}
в результате строка не возвращается, причем при отладке в VS получаем bad ptr, то есть неверно передавать саму строку.
Вопрос: как в Аксапте передать указатель на аксаптовскую строку в ActiveX?