Имя: Пароль:
1C
1С v8
пример внешней компоненты NativeAPI
, , ,
0 тарам пам пам
 
16.07.16
16:39
Разбираюсь с примером внешней компоненты с использованием NativeAPI с ИТС.
В платформе для строк используется двухбайтовый тип WCHAR_T, который под windows объявлен как wchar_t, а под linux - как uint16_t (потому как размер wchar_t в linux и macos равен 4 байтам).

В примере компоненты поэтому все строки объявлены как wchar_t* и при передаче в платформу конвертируются в WCHAR_T с помощью convToShortWchar и convFromShortWchar. Также в примере еще непонятно зачем нужный класс WcharWrapper.

Хочу определить WCHAR_T как char16_t (добавлен в C++11), чтобы избавиться от различного кода для строк под windows и linux и избавиться от необходимости преобразования строк. Не будет ли каких-либо подводных граблей при замене?

Второй вопрос - в примере очень неудобно написано взаимодействие с платформой (например, описание метода компоненты раскидано в куче мест - это enum Methods, g_MethodNames, g_MethodNamesRu, GetNMethods(), FindMethod(), GetMethodName(), GetNParams(), GetParamDefValue(), HasRetVal(), CallAsProc(), CallAsFunc()). Может есть какая-то обертка над всем этим с более человеческим лицом? .net не предлагать - компонента нужна простейшая, не хочется лишних зависимостей тащить.
62 Serginio1
 
17.07.16
09:42
61+ Что касается перегрузки методов и чувствительность к регистру, то ткаие классы можно помечать специальным атрибутом и обрабатывать соответствующим способом. Это даже проще.
63 Провинциальный 1сник
 
17.07.16
09:54
Тут все общаются на тему создания внешних компонент native api, но у меня вопрос немного другой. Можно ли через native api подключиться из одной ИБ к другой и соответственно иметь com-подобный доступ к объектам подключенной базы? Или как можно реализовать COM/OLE-подобный доступ, если система не виндовс?
64 Фрэнки
 
17.07.16
10:18
Закину сюда, чтоб ветку не плодить


После двух лет с момента прошлого выпуска компания Microsoft объявила о начале альфа-тестирования новой версии Skype для Linux. Новый Skype примечателен полной переработкой с переходом на использование web-технологий для интерфейса и протокола WebRTC для организации канала связи. Новый клиент Skype построен с использованием платформы electron, т.е. по сути является упакованной в самодостаточное приложение надстройкой над Chromium и Node.js, в которой выполняется расширенный web-клиент.
65 Фрэнки
 
17.07.16
10:26
<BLOCKQUOTE>После двух лет с момента прошлого выпуска компания Microsoft объявила о начале альфа-тестирования новой версии Skype для Linux. Новый Skype примечателен полной переработкой с переходом на использование web-технологий для интерфейса и протокола WebRTC для организации канала связи. Новый клиент Skype построен с использованием платформы electron, т.е. по сути является упакованной в самодостаточное приложение надстройкой над Chromium и Node.js, в которой выполняется расширенный web-клиент.</BLOCKQUOTE>
66 Serginio1
 
17.07.16
10:53
(63) Здесь несколько вариантов web,Http сервисы, ODATA
или прямой доступ
http://catalog.mista.ru/public/393228/
67 mistеr
 
17.07.16
11:21
(64) Сюда-то зачем?
68 Фрэнки
 
17.07.16
11:30
(67) там в полной версии новости, если бы я ссылку вставил, обсуждалось в комментах использование NODE.js http://www.opennet.ru/opennews/art.shtml?num=44783
69 mistеr
 
17.07.16
15:09
(68) И каким боком это к ВК и 1С?
70 Провинциальный 1сник
 
17.07.16
19:31
(66) Все эти "доступы" не дают доступа напрямую к объектной модели, как в com/ole. Значит, никак?
71 Serginio1
 
17.07.16
21:30
(70) Пока 1С не сделает аналог COM
72 Garykom
 
гуру
17.07.16
21:40
(71) Для чего нужен этот "аналог COM" ?
73 Serginio1
 
17.07.16
21:47
(72) Кроссплатформенное использование классов .Net в 1С через Native ВК.

То есть не надо писать ВК. Можно просто писать определенные классы на .Net или Java и использовать их в 1С.
Например сейчас на Линуксе из-за отсутствия COM в основном используют Вэб или HTTP сервисы. Но это отдельный процесс и скорость низкая из-за маршалинга (сериализации десериализации) и задержками между процессами.
ВК это тоже аналог COM только кастрированный.
74 Garykom
 
гуру
17.07.16
21:58
(73) Лучше сюда ссылку давай https://habrahabr.ru/post/304482/ тут хотя бы слегка причесано, интересно сколько времени убил ))

OLE/COM это тоже отдельный процесс и низкая скорость, но т.к. изначально программисты вынужденно пишут свой код чтобы оно поддерживалось из коробки то тормоза не так заметны.

И 1С потихоньку идет к этому например http://v8.1c.ru/o7/201312rest/.
75 Garykom
 
гуру
17.07.16
21:59
(74)+ И попытка уже была http://www.pvsm.ru/java/15893 не от 1С.
76 Провинциальный 1сник
 
17.07.16
22:08
(74) Это еще вопрос, что лучше - терпеть накладные расходы на сериализацию-десериализацию данных через новомодные методы веб-доступа, или же прямой доступ к com-серверу в общем адресном пространстве. Конечно, com сам по себе тоже весьма убог, потеря точности при неявном преобразовании чисел 1с в плавучку чего стоит. Было бы неплохо, если бы 1с изобрела очередной велосипед "native com", лишенный всех недостатков виндового и в то же время чтобы он был кроссплатформенным.. Но наверное это дико сложно.
77 Serginio1
 
17.07.16
22:09
(74) 2 Недели на реализацию. Но много дал опыт комовской реализации.
Оле/Com есть как внутрипроцессорный (v83.comconnector ) и внешний сервер (v83.Application)
Там разница нехилая.
78 Garykom
 
гуру
17.07.16
22:11
(76) Прямой доступ в общем адресном пространстве это когда на одной машине. Но сейчас это уже глупость так как комп/прога без сети/инета уже ничто.

Т.е. механизма нужна сетевая когда клиент и сервер разделены сеткой вот и выходят самыми удобными "новомодные методы веб-доступа".
79 Serginio1
 
17.07.16
22:11
(76) COM поддерживает Decimal.
Это не дико сложно. Уже есть в 73.

https://habrahabr.ru/post/304482/
https://habrahabr.ru/post/304542/
80 Garykom
 
гуру
17.07.16
22:12
(77) Дык спрашивал не про время кодинга, а про время чтобы оформить статейку ))
81 Serginio1
 
17.07.16
22:13
(80) Да день.
82 Провинциальный 1сник
 
17.07.16
22:14
(79) А 1с об этом знает? С какой версии?
83 Serginio1
 
17.07.16
22:20
(82) В любой. Только вот для нормального использования нужно либо интегрировать в 1С либо допиливать ВК для возврата объектов (аналогов ВК)и передачи объектов в параметрах. В статье этот аспект подробно описан.
84 Провинциальный 1сник
 
18.07.16
06:26
(83) Речь не о ВК, а о связи 1с с 1с.
85 Serginio1
 
18.07.16
07:37
86 Провинциальный 1сник
 
18.07.16
07:41
(85) Какие-то непонятные костыли на каком-то сишарпе.. При чем тут вообще 1с?
87 Beretta
 
18.07.16
07:51
(86) Не обижайте художника! Он так видит!
88 Serginio1
 
18.07.16
08:17
(86) Ты спрашивал про ком под Линукс. В 1С это не реализовано, но через 79 и 83 это можно реализовать. Тема то про ВК.
89 Garykom
 
гуру
18.07.16
08:27
(88) гм ту про oscript.io напомнили, вот бы туда еще обычную net|mono добавить по твоему методу
90 Serginio1
 
18.07.16
10:13
(89) Ну проект интересен, но  "Проект является независимой кросс-платформенной реализацией виртуальной машины, исполняющей скрипты на языке 1С:Предприятие." то есть 1С никам которые не знакомы с другими языками, но хотят делать приложения на языке 1С.
91 Garykom
 
гуру
18.07.16
11:00
(90) Так это же как раз твоя фишка по использованию мощностей .Net из языка 1С.

Тама есть язык 1С, а мощностей не наблюдается все порезано. Вот сделал бы http://oscript.io/dev/page/components чтобы все как в 1C с твоим изобретением было ))
92 Beretta
 
18.07.16
14:14
(91) Ему не надо 1С, ему надо, чтобы народ на c# писал, как же ты не поймешь =)

Просто написать ВК на том же с# и использовать ее - скучно.
Поэтому надо заипаться связкой с 1С через ъТип и прочую невразумительную поипень, да еще и еще заипать других ссылками на stackoverflow с чистым с#.. А потом удивляться, почему это никого не штырит =)
93 Serginio1
 
18.07.16
14:57
(91) Они там как раз .Net внутри используют.
http://oscript.io/dev/page/Как%20добавить%20класс
(92) А потому, что Native ВК нет возможности передать объект или передать объект в параметрах.
Но это все равно значительно проще чем писать ВК.
94 Serginio1
 
18.07.16
14:58
(92) Я тебя впервый раз слышу, а уж тем более не занимался с тобой сексом.
95 Serginio1
 
18.07.16
15:01
96 Beretta
 
18.07.16
15:16
(94) Удобная позиция, чо.
97 Serginio1
 
18.07.16
15:24
(96) Я никого не заставляю использовать мои продукты. Я только показываю пути решения, если на 1С их решить нельзя.
А у того кто задает вопрос есть выбор.
98 Serginio1
 
18.07.16
15:26
И вроде я тебе никогда советов не давал, а если тебя раздражает советы чужим, то можешь просто не читать. Но тебе самому хочется дать совет причем отнюдь не конструктивный. Я его применить не могу. А то, что даю я можно использовать.
99 Garykom
 
гуру
18.07.16
15:30
(93) Да оно на .Net наваяно интерпретатор языка 1С, но к обычной 1С напрямую из языка 1С нету доступа.

Через плагины/компоненты можно с экспортом своих методов для языка 1С. Ситуация аналогичная платформе 1С.
100 trdm
 
18.07.16
15:37
(19)  > Чтобы было ядро, подсистема метаданных, подсистема хранения/бд и т.д.

Вы линупсонутые везде модульность впихvйствуете. И того не понимаете, что не всякая задача таким образом оптимально решается.
А если решается, то получается голимый САП, внедреж которого обходится дороже чем целессобразная сумма.

НАпишите свое нормальное и внедряй.
101 trdm
 
18.07.16
15:47
(87) > Не обижайте художника! Он так видит!

Нкоторым художникам необходимо время от времени в интерфейс красками плеснуть.
102 Garykom
 
гуру
18.07.16
15:50
(100) Заказчика нужно в виде спонсора, художники жадные пошли кушать хотят и кредиты платить.
103 trdm
 
18.07.16
15:59
Мечты, мечты, где ваши грезы....
104 Garykom
 
гуру
18.07.16
16:15
Да нафуй грезы, тут реальные траблы чтобы 1С77 под линукс с xrdp запустить оказывается етерсофт уже нафуй не нужен, штатный wine прекрасно пашет но нужна хитрая настройка самбы под сетевой режим
105 Garykom
 
гуру
18.07.16
16:17
(104)+ вот большое желание не свой 1С, а 1С от 1С древненькую 77 на чем то новом запускать без траблов и дописываемо штатно
106 тарам пам пам
 
18.07.16
16:46
Мда, нафлудили тут на сотню постов, а по теме один orefkov отписался.

Serginio1, я же специально написал про .net сразу - на инфостарте я все это видел и это мне не нужно. А ты тут портянки кода непонятно для кого кидаешь.

(6) char16_t мне поможет тем, что можно будет сразу литералы в виде u"MethodName" задавать. Для работы с char16_t есть отдельный u16string; IDE, вероятнее всего, будет мне их сразу в виде строк показывать, а не в виде массивов чисел, как в случае с uint16_t. Во внешние библиотеки мне передавать строки не нужно; конвертация останется в данном случае только в методе SetLocale(), который под linux вызывает setlocale, которому нужен строго char*. Удобства хочется, в общем.

По интерфейсу - в лоб написать его несложно; но перфекционист во мне негодует, когда описание 5 методов в примере растянуто на 1000 строк, из которых работа самих методов укладывается в 20 строк. В идеале хотелось бы видеть нечто вроде такого:

ComponentInterface<MyClass> iface("MyClass", "MyClassExtension",
    Method("Method1", &MyClass::Method1, ReturnValue<int>(), Arg<int>(0), Arg<double>(10) ),
    Method("Method2", &MyClass::Method2, ReturnValue<void>(), Arg<int>() )
    Property("Prop1", &MyClass::SetProp1, &MyClass::GetProp1)
)

Т. е. все, что экспортирует компонента описано в одном месте, MyClass ни о какой 1с и знать не знает, автоматическая запаковка-распаковка tVariant. Надеялся, что кто-то уже сделал это, потому как я с++ помню слабо (последний стандарт, с которым я работал - C++03) и сам писать это буду медленно и неэффективно. Похоже, однако, что придется писать свой велосипед. Ну да ладно, хоть с++ вспомню да посмотрю, что там в c++11 и c++14 нового ввели.
107 Serginio1
 
18.07.16
16:49
А я тебе про .Net и не писал
http://pastebin.com/8bAXi2MV

Где ты увидел?
108 Garykom
 
гуру
18.07.16
16:56
(107) признавайся в чем код пишешь и почему CTRL+K, CTRL+D не пользуешь или иное?
109 Serginio1
 
18.07.16
16:59
(108) На VS. Там форматирование есть. А при пасте бин там часть вручную писал.
110 тарам пам пам
 
18.07.16
16:59
(107) угу, там какой-то огрызок кода для прослойки 1c->с++->.net. А это ну совсем не относится к .net.
111 Serginio1
 
18.07.16
17:02
(110) Где ты увидел .Net?
Этот код универсален. И пишешь только методы и нициализируешь массивы описания методов.
Забываешь о
GetNMethods(), FindMethod(), GetMethodName(), GetNParams(), GetParamDefValue(), HasRetVal(), CallAsProc(), CallAsFunc()).
112 Serginio1
 
18.07.16
17:06
Все что тебе нужно это

//Затем в классе наследнике определить реальный массив


MethodsArray MethodsArray[2];

//А в конструкторе


pMethodsArray = MethodsArray; // получаем ссылку на реальный массив


SizeArray = 2;        // Инициализируем массив задавая ссылки на реальные методы      


pMethodsArray->Init(L"СоздатьОбертку", CreateDamain, 3, true);        


MethodsArray[1].Init(L"ЗагрузитьDLL", LoadDLL, 1, true);
113 Serginio1
 
18.07.16
17:15
Тоже самое сделать и для Свойств
114 тарам пам пам
 
18.07.16
17:22
.Net я увидел в наименованиях функций, как минимум. Что говорит мне о том, что ты просто выдернул работу с методами из своей прослойки. А не подходит мне это как минимум потому что:
1. Необходимо вручную задавать размер массива методов. Мелочь, но неприятно.
2. Нет автоматической работы с tVariant - нужно писать методы с жестко заданной сигнатурой bool(*CallAsFunc) (void * , tVariant* , tVariant* , const long) и вручную распаковывать tVariant'ы.
3. Нет преобразования строк wchar_t <-> WCHAR_T, что говорит о том, что под linux нужно этот код допиливать.
4. Для использования класса, который про 1c не в курсе, нужно создавать лишний класс-наследник от твоего, где описывать все взаимодействие.

Я выше уже писал, что мне хотелось бы видеть в итоге. Именно в таком виде я этого не нашел, твой код для использования нужно допиливать. Поэтому буду пилить свое.
115 Serginio1
 
18.07.16
17:39
(114) Я для него код вычищал, специально запостил на http://pastebin.com/8bAXi2MV  а он еще и не доволен. Где ты увидел названия функций нетовские?

1. Используй size(MethodsArray)/size(MethodsArray)
2. А как ты хотел? В С++ нет иерархии от Object из которого можно получить тип
3. Это смотря что и как ты будешь вызывать. Я об этом ничего не знаю.
4. Наследник реализует все методы
GetNMethods(), FindMethod(), GetMethodName(), GetNParams(), GetParamDefValue(), HasRetVal(), CallAsProc(), CallAsFunc()).

А в нследнике ты думаешь только о реализации. Такой подход значительно сокращает объем кода.
116 Serginio1
 
18.07.16
17:49
Вернее
size(MethodsArray)/size(MethodInfo)
117 Serginio1
 
18.07.16
18:05
Прошу прощения. Нехватка практики на C++
sizeof(MethodsArray) / sizeof(MethodInfo);
118 тарам пам пам
 
19.07.16
08:32
(115)
1. На кой черт вообще задавать размер явно? что помешало использовать vector?
2. Object  и рефлексии нет, но тут она и не нужна - у нас есть сигнатура экспортируемого метода. Скорее всего, можно это все сделать через шаблоны.
3. Вызывать буду не я, а платформа. Для которой под Linux WCHAR_T определен как двухбайтовый uint16_t, а wchar_t имеет размер 4 байта. И, например, строка
if (pMethodsArray[i].MethodName == MethodName)
где у тебя будет wstring сравниваться с uint16_t* даже не скомпилируется.
4. Вот именно - нужен лишний класс-наследник.

В общем, попробую покурить шаблоны; может и выйдет что-то путное.
119 orefkov
 
19.07.16
08:56
(106)
По поводу char16 - ясно. Главное, что-бы ты сам понимал, что за чем стоит, и что от того, что на клетке со львом написать "заяц" - мясо он жрать не перестанет.
По поводу вменяемого интерфейса - для 7ки этузазисты такое делали. Хотя, стоп, делали в рамках "родного-внутреннего" семёрочночного интерфейса. Для 8ки придётся делать самому, это не сложно.
120 orefkov
 
19.07.16
09:02
+119
Одно из решений было создание массива с описаниями функций и указателями на них - смотри исходники 1С++.
Типа
struct MethodInfo {
  const char nameEng;
  const char
nameRus;
  int paramsCount;
  bool hasRetVal;
  int(BaseClass::callAsProc)(......);
  int(BaseClass::
callAsFunc)(......);
  int(BaseClass::*getDefVal)(.....);
};

и потом методы-реализации берут всю инфу из массива.
В классах наследниках только задаешь свой массив.
121 тарам пам пам
 
19.07.16
09:19
orefkov, у меня главное сомнение по поводу char16_t в плане byte order. Не получится ли так, что платформа работает со строками с в little-endian, а компонента - с big-endian? Стандарт endianness для char16_t не регламентирует.

А по поводу интерфейса - как в (120) реализовать можно; это собственно первое, что пришло в голову. Но мне хочется шаблон сделать так, чтобы вообще наследника не нужно было создавать (так, как в (106) описано). Сейчас уже - просто ради спортивного интереса :)
122 orefkov
 
19.07.16
09:32
(121)
По поводу порядка байт - даю хинт - 1С с юникодом работает не сама, а посредством ICU (которая кстати как-раз всегда с двухбайтовыми символами работает). Не, ну длину строки сама наверное считает, но для этого порядок байт не важен.

Насчёт обёртки - имхо, на современном С++ можно сделать всё.
123 Serginio1
 
19.07.16
10:02
(120) То, что я ему и предлагаю http://pastebin.com/8bAXi2MV
(118) Используй Вектор, Хэш таблицы.
Смысл в создании коллекции с информацией о методе.
По поводу варианта Сделай функцию Convet для преобразования tVariant в нужный тип
Аналог COM VarCast
124 Garykom
 
гуру
19.07.16
11:22
Кто в курсе платформа 1С "читает" список методов что умеет NativeAPI ВК только 1 раз при подключении или можно как то заставить в процессе расширить кол-во методов?
125 Кирпич
 
19.07.16
11:29
(124) можно расширить
126 Garykom
 
гуру
19.07.16
11:37
(125) Это штатно без левых извратов?

Смысл хочу сделать одну ВК к которой можно подсовывать любые другие (в т.ч. на других языках).

В 1С-ку подключается только 1-я, затем дается из 1С команда какую внешнюю "ВК" и откуда подключить = в 1-й ВК появляются все методы из дополнительной "ВК".
127 Serginio1
 
19.07.16
11:40
(124) Посмотри мою компоненту. Я список методов вообще не передаю.
128 Кирпич
 
19.07.16
11:40
(126) да нету никаких извратов. вон все приблуды Serginio1 на этом держатся. и я так делаю.
129 Serginio1
 
19.07.16
11:41
127 Там как реализовано то, что ты хочешь. Я её сегодня подправил
130 Кирпич
 
19.07.16
11:42
(127) только не вываливай сюда листинг, я умоляю :)
131 Serginio1
 
19.07.16
11:43
(130) Скачай https://yadi.sk/d/jRSHEA19svgrn
132 Garykom
 
гуру
19.07.16
11:45
(128) т.е. 1С каждый раз при попытке вызова метода заново перечитывает список их из ВК? А если их дофига?
133 Кирпич
 
19.07.16
11:45
(126) "В 1С-ку подключается только 1-я, затем дается из 1С команда какую внешнюю "ВК" и откуда подключить"
тоже решил осчастливить унылое сообщество своим гениальным изобретением?
(131) да оно мне не надо
134 Кирпич
 
19.07.16
11:46
(132) зачем список. фомилию конкретного метода спросит и номер получит
135 Кирпич
 
19.07.16
11:48
+(134) блин, умудрился фамилию через О написать
136 Garykom
 
гуру
19.07.16
11:48
(134) Не используется GetNMethods работает чисто FindMethod шо ли
137 orefkov
 
19.07.16
11:50
(124)
Она вообще не читает список методов.
1С тут как "рыбка Дори" - проблемы с краткосрочной памятью.
Каждый раз при вызове она будет просить найти метод, спрашивать, сколько у него параметров, возвращает ли он значение. Тыщу раз вызываешь метод в цикле - тыщу раз и прогонит это всё.
138 Кирпич
 
19.07.16
11:50
(136) ну проведи эксперимент. выведи лог в файл и посмотри. я уже забыл чо там к чему.
139 Garykom
 
гуру
19.07.16
11:54
(137) (138) Угу сенкс попробую, просто ВК делал но чисто по шаблону не озадачиваясь этими вопросами.
140 Serginio1
 
19.07.16
11:58
(133) Я всегда интересуюсь чужим опытом. Но не надо так не надо. Было бы предложено.
141 Кирпич
 
19.07.16
11:59
(137) Сканер и весы подключаются и ладно. А на любителей использовать классы .NET и прочие питоны, 1С плюёт с глубокой колокольни.
142 Кирпич
 
19.07.16
12:00
(140) а какой там нужен опыт? в справке 1с всё написано.
143 Garykom
 
гуру
19.07.16
12:01
(133) Нафуй кого то насильно осчастливливать, пусть сами добывают где хотят или пишут с 0 по статейке-докладику если прокатит.
144 Кирпич
 
19.07.16
12:03
(143) ну некоторым нравится, когда их именно насильно осчастливливают :)
145 Serginio1
 
19.07.16
12:36
(142) На заборе тоже написано ...
146 Serginio1
 
19.07.16
12:47
Кстати проблема

public void TestВнешнегоСобытия()
        {

            for(int i=0;i<100; i++)
            {
                var значение = i.ToString();
                Task.Run(async() =>
                {
                   await Task.Delay(1000).ConfigureAwait(false);
                   this?.ВнешнееСобытие1С("Тестовый", "ТестовоеСообщение", значение);
                });

            }

        }


Внешнее событие вызывается 100 раз, но вызывается только 1

Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Вставить содержимое обработчика.
    
    Сообщить("Источник="+Источник);
    Сообщить("Событие="+Событие);
    Сообщить("Данные="+Данные);
КонецПроцедуры

Сейчас с задержками поэкспериментирую. Поставлю Sleep
147 Serginio1
 
19.07.16
12:57
В общем с задержкаи в 50 миллисекунд работает
public async void TestВнешнегоСобытия()
        {

            for(int i=0;i<100; i++)
            {
                var значение = i.ToString();
                Task.Run(async() =>
                {
                   await Task.Delay(1000).ConfigureAwait(false);
                   this?.ВнешнееСобытие1С("Тестовый", "ТестовоеСообщение", значение);
                });

                await Task.Delay(50).ConfigureAwait(false);
            }

        }
148 Serginio1
 
19.07.16
16:13
orefkov ты же вроде с ними общаешься? Не можешь им посоветовать

1. Абсолютно не нужны методы FindMethod, FindProp, IsPropReadable, IsPropWritable, GetNParams, HasRetVal, GetParamDefValue
Так как у методов
bool CallAsProc
bool CallAsFunc
bool SetPropVal и bool GetPropVal есть возвращаемое значение об успешном выполнении
Информация об ошибке возвращается через AddError.
Да и вызов по индексу это анахронизм от IDiapatch где было описание диспинтерфейсов
для увеличения скорости вызова.

2. При возвращении методами SetPropVal и GetPropVal исключение не вызывается
3. Зачем то происходит установка свойств, там где в коде этого не требуется.
4. Вызывается метод как функция, там где метод вызывается как процедура.

5. Один из основных это нельзя вернуть и передать экземпляр ВК из методов ВК.

Я лично не вижу никаких проблем. Определить значение для такого типа и установить ссылку в поле pInterfaceVal.

Подсчет ссылок происходит на стороне 1С. Передавать можно в том числе и объекты 1С только на время вызова метода.


Например практически все программисты 1С используют ComОбъект.

По моей методе можно использовать
NetОбъект,NetТип
JavaОбъект,JavaТип

И эти объявления будут реально кроссплатформенны.
При это различия с ComОбъект минимальны. Имя класса равноценно комовскому ProgID. При этом нет ограничений на используемые типы.
Ты можешь написать свою библиотеку поместить в определенное место и использовать её вместо COM. Без регистрации итд. Расширять возможности 1С станет легче.
149 Кирпич
 
19.07.16
16:19
(148)+1
а еще передай, что англичане ружья кирпичом не чистят
150 Serginio1
 
19.07.16
16:26
(149) Там реально куча ошибок. Плюс получить двоичные данные можно, а вот передать нельзя. Просто довести до ума немного нужно то. И тогда надобность в ВК просто не нужна. Пиши обычный класс на C# или Java. Подключай события.
Ну а ВК могут пользоваться любители натива.
151 orefkov
 
19.07.16
16:29
(149)
Блин, с языка снял. Читал и то же самое думал :)
(148)
Не общаюсь я с ними.
Просто вот представь - уже написаны куча компонент, различные руководства, методические материалы, примеры, статьи там всякие на ИТС. И вдруг так - "всё, стоп. Всё отзываем и переделываем по другому, по-красивому".
В большом корпоративном софте никто просто так ничего не переделывает. Работает - не трожь.
152 Serginio1
 
19.07.16
16:34
(151) Не надо отзывать ничего. Для примера сначала был ILanguageExtender, потом пришел Native ВК. Эволюция.

Добавить возврат из ВК экземпляр ВК и возможность передачи экземпляра ВК в параметрах ничего не ломает.

Дальше

2. При возвращении методами SetPropVal и GetPropVal исключение не вызывается
3. Зачем то происходит установка свойств, там где в коде этого не требуется.
4. Вызывается метод как функция, там где метод вызывается как процедура.

Это тоже ничего не ломает.

Можно добавить ВК номер 3.
153 Кирпич
 
19.07.16
16:35
(150) умоляй 1с и они специально для тебя придумают новый стандарт ВК, какой нибудь "NETAPI" и будет тебе счастье.
154 orefkov
 
19.07.16
16:36
(150)
Да когда ты уже поймешь - нет цели у разработчиков платформы дать способ пользователям изящно её расширять. Основная цель появления ВК - задачи типа связи с торговым оборудованием. Данную задачу интерфейс ВК решает, а насколько эстетично - всем плевать в-принципе. Для большинства одиэсников все эти неты, моны, джавы и прочее существуют в параллельной вселенной. Где одинсник и где json-парсер? Если человек дошёл до понимания того, что ему в 1С понабился какойнить json-парсер - к этому времени он уже сам знает пять способов это сделать.
155 Кирпич
 
19.07.16
16:38
(154) ему таких постов уже накидали сотни. не впитывает. ровно сидит на стуле, не моргает, требует дотнета в 1с.
156 orefkov
 
19.07.16
16:39
(152)
Если присмотреться внимательнее, то NativeAPI это тот же ILanguageExtender, только обрезанный в части передачи объектов и плевавший на имплементацию чем-либо кроме C++.
То есть как-бы даже шаг назад по сравнению c ILanguageExtender. Оно и понятно - нужно было подключить фискальник с весами под линуксом, вот и слепили на скорую руку.
157 Serginio1
 
19.07.16
16:43
(154) Постоянно проиходится использовать, то чего в 1С нет. Мне эта кроссплатформенность по барабану. Сейчас вообще на 7.7 программирую.
Так проблема то в том, например HTTPClient никаких проблем никогда не было. В 1С даже стандартные классы могут не работать либо быть значительно менее функциональны. Половина кода в 1С это по сути стандартные библиотеки .Net или Java.
1С делает постоянно прослойку между С++ библиотеками и 1С.
1 прослойка это намного проще и использовать уже оттестированные миллионами программистами классы.

И если на Линуксе туго с COM, то при таком подходе и на линуксе сразу станет проще писать.
(156) Уже время куча прошло. А воз и ныне там.
158 Serginio1
 
19.07.16
16:46
(155) Я не требую дотнета, я за использование .Net и Java в 1С и показываю как это можно реализовать на конкретных примерах.
Ты же сам сказал, что если 1С реализует поддержку .Net и Java классов в 1С ты будешь их использовать.
159 Кирпич
 
19.07.16
16:50
(158) "Ты же сам сказал, что если 1С реализует поддержку .Net и Java классов в 1С ты будешь их использовать."
ну если 1с сделает и это будет так же удобно как COM, то буду использовать, но в исключительных случаях(как и COM). Но 1с этого не сделает, а я свои задачи решаю и так. И нужны эти дотнеы мне раз в три года.
160 Кирпич
 
19.07.16
16:52
А если увижу у себя в конторе, что кто-то пишет чего то на твоих врапах и ъТипах, то я ему так по рукам линейкой тресну...
161 Serginio1
 
19.07.16
16:58
(159) Ты их раз в 3 года используешь потому, что обходишься подручными средствами.
Например аналог String.Format появился совсем недавно. Работу с датами http://catalog.mista.ru/public/434345/ все в рукопашную. Split это все в конфигурации отдельными методами. Итд.
(160) ъТипах это от безысходности. А так пиши ВК или COM, вместо обычного класса. Суть одна и таже. Только с COM тебе нужно регистрировать каждую библиотеку, а Native ВК малофункционален из-за невозможности передавать объекты.
Да и в COM можно передавать только COM совместимые типы.
В моем Врапе нет никаких ограничений. Так, что ...