|
пример внешней компоненты 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
|
Закину сюда, чтоб ветку не плодить
|
|||
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
|
(84) Посмотри http://catalog.mista.ru/public/402038/
|
|||
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
|
(92) Посмотри исходники https://github.com/EvilBeaver/OneScript/tree/develop/src/ScriptEngine
|
|||
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
|
||||
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 совместимые типы. В моем Врапе нет никаких ограничений. Так, что ... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |