| 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.
 |  |