native API на C++. Функция со строковым параметром и строковым результатом.
☑
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с валиться. что не так и как сделать правильно.
заранее благодарен.
1
H A D G E H O G s
06.09.12
✎
17:09
На какой строке кода валится то?
2
vladenoff
06.09.12
✎
17:13
TV_VT(pvarRetValue) = VTYPE_PSTR;
3
vladenoff
06.09.12
✎
17:14
вероятно что то с "name" не то...
4
orefkov
06.09.12
✎
22:21
(0)
Возвращать надо всегда копию строки, причем память под копию выделять через менеджер памяти, который 1С дала тебе при инициализации. А у тебя в одном случае просто копируется указатель (и 1С потом его дважды будет удалять), во втором случае - память выделяется через new.
5
vladenoff
07.09.12
✎
11:48
(4)Друг, дай плиз пример кода.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой