Имя: Пароль:
1C
1С v8
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ет в милосердии тем, кто ниже его? Петр Трубецкой