0
vladenoff
06.09.12
✎
17:03
|
Всем доброго времени суток!
Кто то тут может шарит в технологии native API на C++?
в демке от 1С добавляю функцию, которая в качестве параметра принимает строку и её же должна выдать в качестве результата. Вот мой код:
....
bool CAddInNative::CallAsFunc(const long lMethodNum,
tVariant* pvarRetValue, tVariant* paParams, const long lSizeArray)
....
switch(lMethodNum)
{
case eMethTestFunction:
{
int ValParam;
if (!lSizeArray || !paParams)
return false;
switch(TV_VT(paParams))
{
case VTYPE_PSTR:
ValParam = 1;
name = paParams->pstrVal;
break;
case VTYPE_PWSTR:
ValParam = 2;
::convFromShortWchar(&wsTmp, TV_WSTR(paParams));
size = wcstombs(0, wsTmp, 0)+1;
mbstr = new char[size];
memset(mbstr, 0, size);
size = wcstombs(mbstr, wsTmp, getLenShortWcharStr(TV_WSTR(paParams)));
name = mbstr;
break;
default:
return false;
}
pvarRetValue->pstrVal = name;
pvarRetValue->strLen = size;
TV_VT(pvarRetValue) = VTYPE_PSTR;
ret = true;
break;
}
....
при этом 1с валиться. что не так и как сделать правильно.
заранее благодарен.
|
|
4
orefkov
06.09.12
✎
22:21
|
(0)
Возвращать надо всегда копию строки, причем память под копию выделять через менеджер памяти, который 1С дала тебе при инициализации. А у тебя в одном случае просто копируется указатель (и 1С потом его дважды будет удалять), во втором случае - память выделяется через new.
|
|