|
1C и AddInNative. Возврат значения в 1С. | ☑ | ||
---|---|---|---|---|
0
temapriv
26.06.17
✎
06:16
|
Пытаюсь написать свою внешнюю нативную компоненту по образцу из ИТС на С++. В С++ ничего не понимаю. Компонента предназначена для работы с другой dll, то есть как обёртка.
Вызовы функций осилил, а вот возврат значений из компоненты в платформу никак не могу победить. В CallAsFunc добавляю обработку своих вызовов функции. Дальше с возвратом проблемы. Есть вроде как указатель на переменную типа tVariant . Как в него что-то отдать не понимаю, и по примерам не получается.
Как я понимаю, нужно привести сначала данные к нужному типу, потом куда-то сложить. Покажите на пальцах пожалста, "я из деревни". :) |
|||
1
igorPetrov
26.06.17
✎
06:22
|
(0) Как можно писать на С++, ничего не понимая в С++? Жесть
|
|||
2
sFAQer
26.06.17
✎
06:49
|
(1) в 1Сеж получается...
|
|||
3
igorPetrov
26.06.17
✎
07:35
|
(2) +100 ))))
|
|||
4
Кирпич
26.06.17
✎
07:43
|
Щас появится адепт
|
|||
5
temapriv
26.06.17
✎
07:46
|
(4) жду, ага
|
|||
6
temapriv
26.06.17
✎
07:46
|
+(5)но нужно другое
|
|||
7
Имитация работы
26.06.17
✎
07:47
|
(4) Не появится. Он нашел работу и фанатеет от typescript. Славные деньки Ъ в прошлом...
|
|||
8
igorPetrov
26.06.17
✎
07:47
|
(6) что ж тебе нужно, девИца?
|
|||
9
temapriv
26.06.17
✎
07:50
|
(8) я вам не девИца, уважаемый. Есть что по делу сказать, говорите. Флудить, пожалуйста, не нужно.
|
|||
10
igorPetrov
26.06.17
✎
07:54
|
(9) Что тут можно сказать по делу? Ты чего ждешь? Готового решения от других, так ты его все равно не поймешь.
|
|||
11
orefkov
26.06.17
✎
08:08
|
(0)
Раз указатель, то вместо точки надо писать стрелочку: retVal->vt = VTYPE_I4; retVal->lVal = 1; |
|||
12
temapriv
26.06.17
✎
08:22
|
(11) Спасибо. Такая запись срабатывает.
vt - это описание типа значит? а lVal - как работает? В описании типов написано: _ANONYMOUS_UNION union
Верно понимаю, в какое "поле" присваивать значение зависит от типа? Если мне нужно передать более сложный объект, получается его тут нужно описать? |
|||
13
Мимохожий Однако
26.06.17
✎
08:27
|
Форумы по С++ закрыли уже?
|
|||
14
arsik
гуру
26.06.17
✎
08:31
|
(12) Мне кажется, это описаны те типы которые 1С может преобразовать в свои. Туда нельзя добавить.
|
|||
15
temapriv
26.06.17
✎
08:37
|
(14) Да, похоже на то. На ИТС они описаны. Вопрос остаётся со сложными объектами. Вроде как подошел бы VTYPE_VARIANT,вроде как структура из любых типов, но опять же ИТС гласит, что этот тип не поддерживается.
|
|||
16
orefkov
26.06.17
✎
08:40
|
(15)
По технологии native в данный момент нельзя передать объекты. Поддерживаются только примитивные типы. union - это объединение, то есть все эти поля занимают одну область памяти, и следовательно, в один момент времени там может быть только одно из этих типов значений. Какое - указывается в vt. |
|||
17
temapriv
26.06.17
✎
08:51
|
(16) Спасибо. Становится яснее. Структуру значит можно передать, придётся как-то в неё всё складывать.
Еще в примерах используется выделение памяти с помощью AllocMemory. В чем тогда разница? Есть указатель, можно в него отдать данные, а можно отдельно выделить память с этим же указателем? |
|||
18
Кирпич
26.06.17
✎
08:54
|
а где адепт? уж не заболел ли.
|
|||
19
temapriv
26.06.17
✎
08:56
|
(18) в (7) говорят, что ему некогда.
|
|||
20
temapriv
26.06.17
✎
13:26
|
продолжу дальше :)
у меня из сторонней dll возвращается структура, в которой есть свойство char, длиной 100. Я пытаюсь его передать в 1С в функции. Делаю так:
потом пытаюсь отдать в 1С
при вызове,1С падает с ошибкой "некорректная работа компоненты с памятью". Подскажите, чего делаю не так? |
|||
21
temapriv
26.06.17
✎
13:27
|
то, что пытаюсь передать в
designInfo.designName |
|||
22
Кирпич
26.06.17
✎
13:40
|
почитай про менеджер памяти 1С и подумай нахрена он вообще нужен
|
|||
23
temapriv
26.06.17
✎
13:43
|
(22) вот там я повыше спрашивал про это. Потому как непонятно, где-то он используется, где-то.
|
|||
24
Кирпич
26.06.17
✎
13:44
|
ну вот здесь и используется
|
|||
25
Кирпич
26.06.17
✎
13:47
|
почитал бы документацию. и работы меньше и позора.
|
|||
26
temapriv
26.06.17
✎
13:49
|
(24) Хорошо. Почему я число могу вернуть, не используя менеджер, а строку не могу.
|
|||
27
Кирпич
26.06.17
✎
13:52
|
(26) потому что 1С падает с ошибкой "некорректная работа компоненты с памятью"
|
|||
28
temapriv
26.06.17
✎
13:56
|
(27) так хорошо объясняете
|
|||
29
Кирпич
26.06.17
✎
13:59
|
(28) "При вызове методов компоненты и передаче возвращаемых значений, которые не могут быть переданы полностью через стек, компонента должна выделять память с помощью функции AllocMemory, предоставляемую менеджером памяти. "1С:Предприятие" впоследствии освободит эту память с помощью функции FreeMemory."
https://its.1c.ru/db/metod8dev#content:3221:hdoc:_struct_folder так пойдет? |
|||
30
temapriv
26.06.17
✎
14:01
|
(29) Спасибо большое, теперь ясно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |