1C и AddInNative. Возврат значения в 1С. #799885


#0 by temapriv
Пытаюсь написать свою внешнюю нативную компоненту по образцу из ИТС на С++. В С++ ничего не понимаю. Компонента предназначена для работы с другой dll, то есть как обёртка. Вызовы функций осилил, а вот возврат значений из компоненты в платформу никак не могу победить. В добавляю обработку своих вызовов функции. Дальше с возвратом проблемы. Есть вроде как указатель на переменную типа . Как в него что-то отдать не понимаю, и по примерам не получается. Как я понимаю, нужно привести сначала данные к нужному типу, потом куда-то сложить. Покажите на пальцах пожалста, "я из деревни". :)
#1 by igorPetrov
Как можно писать на  С++, ничего не понимая в  С++? Жесть
#2 by sFAQer
в 1Сеж получается...
#3 by igorPetrov
+100 ))))
#4 by Кирпич
Щас появится адепт
#5 by temapriv
жду, ага
#6 by temapriv
+но нужно другое
#7 by Имитация работы
Не появится. Он нашел работу и фанатеет от typescript. Славные деньки Ъ в прошлом...
#8 by igorPetrov
что ж тебе нужно, девИца?
#9 by temapriv
я вам не девИца, уважаемый. Есть что по делу сказать, говорите. Флудить, пожалуйста, не нужно.
#10 by igorPetrov
Что тут можно сказать по делу? Ты чего ждешь? Готового решения от других, так ты его все равно не поймешь.
#11 by orefkov
Раз указатель, то вместо точки надо писать стрелочку:
#12 by temapriv
Спасибо. Такая запись срабатывает. vt - это описание типа значит? а lVal - как работает? В описании типов написано: Верно понимаю, в какое "поле" присваивать значение зависит от типа? Если мне нужно передать более сложный объект, получается его тут нужно описать?
#13 by МимохожийОднако
Форумы по С++ закрыли уже?
#14 by arsik
Мне кажется, это описаны те типы которые 1С может преобразовать в свои. Туда нельзя добавить.
#15 by temapriv
Да, похоже на то. На ИТС они описаны. Вопрос остаётся со сложными объектами. Вроде как подошел бы VTYPE_VARIANT,вроде как структура из любых типов, но опять же ИТС гласит, что этот тип не поддерживается.
#16 by orefkov
По технологии native в данный момент нельзя передать объекты. Поддерживаются только примитивные типы. union - это объединение, то есть все эти поля занимают одну область памяти, и следовательно, в один момент времени там может быть только одно из этих типов значений. Какое - указывается в vt.
#17 by temapriv
Спасибо. Становится яснее. Структуру значит можно передать, придётся как-то в неё всё складывать. Еще в примерах используется выделение памяти с помощью AllocMemory. В чем тогда разница? Есть указатель, можно в него отдать данные, а можно отдельно выделить память с этим же указателем?
#18 by Кирпич
а где адепт? уж не заболел ли.
#19 by temapriv
в говорят, что ему некогда.
#20 by temapriv
у меня из сторонней dll возвращается структура, в которой есть свойство char, длиной 100. Я пытаюсь его передать в 1С в функции. Делаю так: потом пытаюсь отдать в 1С при вызове,1С падает с ошибкой "некорректная работа компоненты с памятью". Подскажите, чего делаю не так?
#21 by temapriv
то, что пытаюсь передать в
#22 by Кирпич
почитай про менеджер памяти 1С и подумай нахрена он вообще нужен
#23 by temapriv
вот там я повыше спрашивал про это. Потому как непонятно, где-то он используется, где-то.
#24 by Кирпич
ну вот здесь и используется
#25 by Кирпич
почитал бы документацию. и работы меньше и позора.
#26 by temapriv
Хорошо. Почему я число могу вернуть, не используя менеджер, а строку не могу.
#27 by Кирпич
потому что 1С падает с ошибкой "некорректная работа компоненты с памятью"
#28 by temapriv
так хорошо объясняете
#29 by Кирпич
"При вызове методов компоненты и передаче возвращаемых значений, которые не могут быть переданы полностью через стек, компонента должна выделять память с помощью функции AllocMemory, предоставляемую менеджером памяти. "1С:Предприятие" впоследствии освободит эту память с помощью функции FreeMemory." так пойдет?
#30 by temapriv
Спасибо большое, теперь ясно.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С

Back to top