Показать сообщение отдельно
Старый 13.08.2007, 10:33   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
передать строку в ActiveX
Всем привет
есть метод в 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?