Вход | Регистрация
 

На чем сейчас модно писать NATIVE внешние компоненты?

На чем сейчас модно писать NATIVE внешние компоненты?
Я
   Гений 1С
 
17.01.20 - 13:39
Есть у меня одна компонента для биометрии ANVIZ, хочу ее переписать на 32/64 разряда, потому что она только на 32 клиенте работает.
На чем сейчас принято писать такие компоненты?
Ибо она у меня написана на VB6, а на VB6 скомпилировать под 64 разряда нельзя Или можно?
   Xapac
 
1 - 17.01.20 - 13:41
щас модно на гидхабе
   palsergeich
 
2 - 17.01.20 - 13:43
(0) я забирал анвизовские данные из sql.
А по теме на c++
   NorthWind
 
3 - 17.01.20 - 13:50
очевидно, модно писать на том, на чем умеешь. Нет?
   Cyberhawk
 
4 - 17.01.20 - 13:51
Разве это вопрос моды, а не ограничений платформы?
   Garykom
 
5 - 17.01.20 - 13:55
(0) Я на Golang пишу ВК
   Garykom
 
6 - 17.01.20 - 14:00
Если чисто технически то надо развить идею Кроссплатформенное использование классов .Net в 1С через Native ВК. от Serginio1


Короче пишется набор ВК "прокладок" на C++ под все платформы 1С (32/64, win/lin/mac/android/ios) со своим интерфейсом расширения ВК под что угодно.
Короче программист 1С просто берет эту универсальную ВК и подставляет к ней нечто свое на чем надо или уже готовое.
Причем не надо писать по сложному стандарту ВК от 1С, все сильно проще и например стандартная C DLL или http-сервисы обмен.
   Garykom
 
7 - 17.01.20 - 14:02
   mikecool
 
8 - 17.01.20 - 14:03
а на питоне можно ВК собрать?
   Garykom
 
9 - 17.01.20 - 14:04
(8) ВК нет, использовать код на питоне для вызовов из 1С да
   ДенисЧ
 
10 - 17.01.20 - 14:05
   Garykom
 
11 - 17.01.20 - 14:06
(10) Ну чисто теоретически можно упаковать интерпретатор питона в dll но ее размер будет слегка того
   Asmody
 
12 - 17.01.20 - 14:06
(8) на ИС была ВК для вызова интерпретатора python
   Garikk
 
13 - 17.01.20 - 14:06
(11) да кого сейчас размер волнует, меньше 100мб будет и норм
   mikecool
 
14 - 17.01.20 - 14:09
(9) есть нетленка, которую хочу упаковать в длл
есть небольшие познания в питоне и хотел бы развить
а так получается, что код питона все равно будет доступен, откуда его не вызывай?
   Garikk
 
15 - 17.01.20 - 14:11
(14) дада, надо всё зашифровать и запретить, а то как украдут как начнут зарабатывать миллиарды!!!
   Garykom
 
16 - 17.01.20 - 14:11
(14) В байт-коде pyc можно
http://python-3.ru/page/python-3-kompiljacija-v-bajt-kod
   Гений 1С
 
17 - 18.01.20 - 10:02
не, ну робята, в самом деле на чем? на си++?
   Гений 1С
 
18 - 18.01.20 - 10:03
а на каком конкретно си++, какую IDE брать?
   NorthWind
 
19 - 18.01.20 - 10:34
(17) берете примеры кода на разных языках/ide и смотрите. Что удобнее/понятнее/бесплатнее, то и используете. О чём тут думать?
   H A D G E H O G s
 
20 - 18.01.20 - 11:45
(17) Тебе - ни на каком. Ниасилишь.
   Гений 1С
 
21 - 18.01.20 - 13:04
(20) vb6 осилил, не ври
   Garykom
 
22 - 18.01.20 - 16:25
(21) Очень смешно, да.

Ты не оттуда заходишь. Надо не на чем писать а для чего и под чего писать. И что внутри будет и зачем.
Вот исходя из этого и выбирать на чем.

На C++ писать просто жопа. Простейший пример хрен с того, можно скомпилить.
Но как только понадобится нечто реальное, ну например захочется тебе кодировку строк поменять или просто списочек в памяти из объектов неких создать и тут в формате ВК упс - обломс по простому как все СИПИПИшники делают.

Тут редко какая готовая кода на cpp в шаблоне ВК взлетит, а уж что память надо у 1С просить это гм.
   H A D G E H O G s
 
23 - 18.01.20 - 17:40
(21) Просто кусочек кода на C++ для компоненты под Ведроид

extern "C" JNIEXPORT void JNICALL Java_com_ASF_ScanCodeTransportMC_TScanCode_OnKeyCode(JNIEnv* env, jclass jClass, jlong jcon, jlong jmem, jstring jData)
{
    IAddInDefBaseEx* con = (IAddInDefBaseEx*)jcon;
    IMemoryManager* mem = (IMemoryManager*)jmem;
    int lsize;
    lsize = 4;
    WCHAR_T* ret = ToV8StringJni(mem, jData, &lsize);
    _trace("trc_Step6N_EventKeyCode");
    con->ExternalEvent(s_EventSource, s_EventKeyCodeName, ret);
}
   Garykom
 
24 - 18.01.20 - 17:45
(23) Плиз покажи код ToV8StringJni()
Мне интересно в Java или в C++ WCHAR_T* делаешь
   H A D G E H O G s
 
25 - 18.01.20 - 17:50
(24) Хехехе. Я тоже долго вкуривал.

WCHAR_T* ToV8StringJni(IMemoryManager* mem, jstring jstr, int* lSize)
{
    WCHAR_T* ret = NULL;
    if (jstr)
    {
        JNIEnv *jenv = getJniEnv();
        *lSize = jenv->GetStringLength(jstr);
        const WCHAR_T* pjstr = jenv->GetStringChars(jstr, NULL);
        mem->AllocMemory((void**)&ret, (*lSize + 1) * sizeof(WCHAR_T));
        for (auto i = 0; i < *lSize; ++i)
            ret[i] = pjstr[i];
        ret[*lSize] = 0;
        jenv->ReleaseStringChars(jstr, pjstr);
    }
    return ret;
}
   Гений 1С
 
26 - 18.01.20 - 17:50
(22) ну а на чем пишут уваще?
   Garykom
 
27 - 18.01.20 - 17:53
(26) Под винду Visual Studio последнюю 2019 бери
   NorthWind
 
28 - 18.01.20 - 17:55
(23) и... чо? Где пугаться?
   H A D G E H O G s
 
29 - 18.01.20 - 17:59
(28) Да пугаться не надо. Надо просто охеревать, какой херней можно страдать на ровном месте и гордо бить в грудь "Мы C++, мы преодолеваем"
   Garykom
 
30 - 18.01.20 - 18:03
(29) Имхо C++ редкостное извращение после логичного и понятного просто C
Придумщик был извращенцем но вот во что превратили его придумку создатели компиляторов и пользователи-разрабы это просто пиздец.
 
 Рекламное место пустует
   H A D G E H O G s
 
31 - 18.01.20 - 18:06
(30) Я C не видал, но C++ создали редкостные епланы.
   Garykom
 
32 - 18.01.20 - 18:10
(31) С это просто конфетка, чисто технически С++ он сейчас не знаю но изначально код на С++ конвертировался в C код и компилировался на имеющихся С компиляторах.

Короче это примерно как Kotlin который в Java конвертится.
Но создатели Kotlin упрощают Java, а C++ это гребаная абстракция классов изначально из Симулы с кучей синтаксического сахара и долбаных алиасов и еще кучи всего.

Короче если убрать из С++ классы и все лишнее то останется нечто похожее на ЯП 1С :)
   ДенисЧ
 
33 - 18.01.20 - 18:25
Собрались два неосилятора и хают нормальный язык... )))
   NorthWind
 
34 - 18.01.20 - 18:56
(30) вообще-то болячки у них одни и те же, вернее говоря, болячки Си перешли по наследству к С++. Так что насчет конфетки вопрос сложный.
В плюсах хоть смарт-поинтеры есть, всяко меньше головняка с освобождением кучи.
   Garykom
 
35 - 19.01.20 - 17:38
(33) Попробуй совместить шаблон ВК на С++ и https://github.com/cesanta/mongoose или https://github.com/civetweb/civetweb
Ну никак не выходит каменный цветок хотя по отдельности все прекрасно пашет.
   ДенисЧ
 
36 - 19.01.20 - 18:05
(35) ТЫ чего, я ж тупой. Для меня typescript - предел...
   Кирпич
 
37 - 19.01.20 - 21:13
(35) Так надо же чота понимать в C++, чтобы там чего то совместить. А ты хочешь нихера не понимая дальше хеловорда, взять и разобраться в сложном проекте.
   Garykom
 
38 - 19.01.20 - 21:31
(37) Я достаточно понимаю чтобы по отдельности оно работало и простые допилки, да не сильно дальше от хелловорда но вот это меня вводит в ступор.

Гм оно заработало!
Оказалось сам скосячил.
https://i.paste.pics/c48430cc23b45ada37d9823ccbaf070a.png
https://i.paste.pics/dd225203de459e7cd5609cda3f4c4a75.png
https://i.paste.pics/b1320489a0ac4a5719068ecf936b9fe2.png
   Garykom
 
39 - 19.01.20 - 21:42
(38)+ Короче идея такая, пишу ВК разных видов (win/lin, натив и com, x86 и x86_64) на C++ или Lazarus для 1С.
ВК умеет играть роль http-сервера и клиента, причем входящие запросы от сервера закидывает в 1С во внешнее событие с уникальным id.
В коде 1С можно обработать событие и передать назад ответ в ВК с указанием id, если это сделать шустро то внешний http клиент дождется ответа от ВК-сервера.

Далее все просто, на чем угодно пишется нечто что так же умеет http сервер/клиент и получаем что 1С может юзать это нечто, причем как будто это обычная ВК.
В качестве протокола пока думаю JSON-RPC.

В результате проблема на чем писать ВК снимается полностью, особенно для ЯП/технологий которые легко умеют http сервер/клиент.
   Garykom
 
40 - 20.01.20 - 07:38
(39)+ Прикольно вышло с ВК
Вот как юзать в 1С

https://i.paste.pics/c666cbefee831905d50f4627dfce29e7.png

А вот результат
https://i.paste.pics/e363e16e0a44f16d64cd38efbce96af3.png

Осталось допилить до ума, чтобы порт там можно было выбирать и больше данных передавал для обработки.
   Кирпич
 
41 - 20.01.20 - 08:40
(39) "В результате проблема на чем писать ВК снимается полностью"
Да нет такой проблемы. Есть же C++. А http 1с и так умеет.
   Кирпич
 
42 - 20.01.20 - 08:43
+(41) Есть проблема, что не все одинесники C++ знают.
   Сияющий в темноте
 
43 - 20.01.20 - 08:58
Зачем http,когда есть просто Tcp.
Опять же,в 1с внешнее событие обрабатывается,когда интерфейс отпустили,если какой-то отчет и т.п.то может быть проблема.
хотя,вообще вся идея внешних компонент,это чтобы из 1с куда-то во вне идти.
в любом случае,код в 1с из внешней компоненты не исполнишь,то есть прокладка нужна.
а рассылка события всем формам,это тоже из области,мы сначала сделали,а потом подумали.
   Garykom
 
44 - 20.01.20 - 08:59
(41) (42) Так можно хоть на OneScript будет писать "ВК" для 1С же.
К этой моей ВК в добавок сваять примеры на разных ЯП включающие клиент/сервер http и пусть 1Сники пишут на чем знают.
   Garykom
 
45 - 20.01.20 - 08:59
(43) Нафик-нафик просто tcp, да можно но не хочу ибо пройденный этап уже.
   Garykom
 
46 - 20.01.20 - 09:01
(43) >код в 1с из внешней компоненты не исполнишь,то есть прокладка нужна

Ну да нужна прокладка в виде внешнего события, которое уже что то умеет.
Имхо я решал задачу (0) на чем писать - на чем хочешь сча!
   Garykom
 
47 - 20.01.20 - 09:02
(46)+ Т.е. гению достаточно прикрутить к своей x32 ВК http и готово.
Даже под x64 не надо перекомпилить.
   oleg_km
 
48 - 20.01.20 - 10:18
(40) Если по методу Сергея Смирнова к 1С подключить .NET, то http-сервер можно сделать безо всяких дополнительных компонент, просто используя System.Net.HttpListener. Работает уже больше 5-ти лет
   crasler
 
49 - 20.01.20 - 10:20
(47) А не пробовал сделать компоненту FFI (libffi) ?
   Garykom
 
50 - 20.01.20 - 11:13
(49) Вроде не проблема сделать, перед этим я DLL на Golang подрубал через прокладку на C++
Наваял свой LoadDLL и там обертки для вызова функций.
   Garykom
 
51 - 20.01.20 - 11:14
(48) В курсе про это, но это .Net привязка, могут быть разные глюки и под линуксом не але.
   Гений 1С
 
52 - 22.01.20 - 15:35
а на C# можно писать ВК? Имхо этот язык ближе к бейсику и 1С.
Вообще, в пакете 1С "Технология ВК" демо-примеры все еще на VB6 или что-то новенькое добавили?
   Garykom
 
53 - 22.01.20 - 15:54
(52) Геня ты меня убиваешь.

Раньше были "Создание компонент, с использованием технологии COM" (1С 7.7/8, только Windows принято делать только x86 32-х битные).
Сейчас же "Создание компонент с использованием технологии Native API" (1С 8.3, 32/64, win/lin/mac/android/ios/web).

Вот старую COM ты можешь на C# наваять, но если захочется Native API то тут не выйдет на C# и нужен C++ или Delphi/Lazarus на данный момент.
   Garykom
 
54 - 22.01.20 - 15:55
(52) И да примеры на VB6 давно убраны в последних примерах технологии ВК, там только C++ разных видов под разные целевые.
   Garykom
 
55 - 22.01.20 - 15:56
   Гений 1С
 
56 - 15.02.20 - 14:20
(55) спасибо
   Serginio1
 
57 - 07.05.20 - 17:48
   Garykom
 
58 - 07.05.20 - 17:58
(57) Хай.

Кстати я сча подобную штуку делаю для 1С только через gRPC чтобы на любых языках можно было по сути ВК ваять.
Сначала хочу без изврата с "ОбернутьОбъектНеопределенногоТипа" потому что у меня заранее в protobuf сервисы (service) и объекты (message) определены и ВК их штатно через Новый создавать будет.
Там только сделаю методы для всех объектов сериализации в строку ну и получения строковой ссылки для передачи как параметр.

Т.е. вызов метода удаленного RPC будет выглядеть примерно как
СервисВнутриВК.ВызватьМетод(МойОбъектВнутриВК.Ссылка)
   Djelf
 
59 - 07.05.20 - 18:00
(58) А ты эту штуку нашел? https://go-review.googlesource.com/c/go/+/133946/6
Может сильно упростить, возможно в 1.15 прорвется.
   Garykom
 
60 - 07.05.20 - 18:03
(59) Вот эта штука если будет возможность c-shared dll компилить да сильно упростит написание под винду.
Сча я только под линукс могу на голанге ВК для 1С делать без прокладки на C++.
 
 Рекламное место пустует
   Garykom
 
61 - 07.05.20 - 18:07
(58)+ Хотя да для ВнешнегоСобытия от аналога "ОбернутьОбъектНеопределенногоТипа" не получится отказаться.
   Serginio1
 
62 - 07.05.20 - 18:11
(58) Кстати сейчас сам смотрю gRPC. Написано, что  https://blog.maddevs.io/introduction-to-grpc-6de0d9c0fe61
Двунаправленный стрим (Bidirectional streaming). Клиент инициализирует соединение, создаются два стрима. Сервер может отправить изначальные данные при подключении или отвечать на каждый запрос клиента по типу “пинг-понга”.

Вот только примеров не нашел.
   Djelf
 
63 - 07.05.20 - 18:15
(60) Конечно упростит, если примут патчи...
Можно и как-то на структурах еще, к 7ке я собрал вк на голанг, она запускается, предупреждения выводит, а сообщения нет, и хз как сделать так чтобы объект из 7ки создать.
З.Ы. сколько языков программирования не изучал, только у этого порог вхождения на уровне программиста 1С (или очень ниже), а количество библиотек огромно. Надо думать/делать как это подключить без прокси-библиотек.
   Garykom
 
64 - 07.05.20 - 18:16
(62) Там HTTP/2 поверх tcp и оно не для всех ЯП имеется, только для тех что умеют tcp клиент/сервер реализовывать.
   Garykom
 
65 - 07.05.20 - 18:17
(63) Можно исходники в личку что у тебя "к 7ке я собрал вк на голанг"?
Интересно изучить что и как
   Garykom
 
66 - 07.05.20 - 18:24
   Garykom
 
67 - 07.05.20 - 18:26
(63) Ага я тоже с Golang поразился, там конечно есть моменты не очень понятные (точнее слегка непривычная концепция) но основы простейшие.
Если есть опыт программирования на других языках но Go учится за пару недель до уровня пет-проекта.
   Serginio1
 
68 - 07.05.20 - 18:28
62+ Понял это двухнаправленный обмен https://grpc.io/docs/tutorials/basic/csharp/
Надо посмотреть как с событиями как пуш нотификация на вэбсокетах
   Djelf
 
69 - 07.05.20 - 18:29
(65) Свинарника в коде я не стесняюсь, https://cloud.mail.ru/public/3ApY/ARCofAaid
   Serginio1
 
70 - 07.05.20 - 18:31
(64) Там поддержка HTTP/2 для андроида нужно включать https://habr.com/ru/post/499588/
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
   Garykom
 
71 - 07.05.20 - 18:40
(70) Ну у меня пока без HTTP/2 будет, по сути я беру protobuf и gRPC но использую для вызовов между dll.
Затем уже буду думать как это дальше развивать.
Так то gRPC оно шаблоны клиента и сервера (сервиса) генерит.
   Serginio1
 
72 - 07.05.20 - 18:40
68+ Понял https://github.com/grpc/grpc/issues/13894
Можно создать соединение вызвать метод и асинхронно читать ответы
   Serginio1
 
73 - 07.05.20 - 18:42
(71) прото это аналог wsdl. protobuf конечно хорош, но главное это HTTP/2
   Garykom
 
74 - 07.05.20 - 18:42
(72) И вот у меня идея использовать шуструю бинарную сериализацию protobuf чтобы между разными dll (управляемый-динамический и неуправляемый код) объектами обмениваться.
Т.е. вместо передачи ссылок на объекты в памяти сам объект сериализованный передается.
   Garykom
 
75 - 07.05.20 - 18:43
(73) wsdl это тормозной xml а тут бинарная сериализация и можно в json заодно.
   Garykom
 
76 - 07.05.20 - 18:46
(74)+ А затем делаем ход конем и опс - 1С с одной частью ВК на одном компе, а "вторая часть ВК" на чем угодно на другом компе/сервере даже через инет.
А из 1С это выглядит как будто обычная ВК используется.
   Djelf
 
77 - 07.05.20 - 18:58
Способ в (76) интересен, но производительностью придется видимо пожертвовать?
   Garykom
 
78 - 07.05.20 - 19:01
(77) С производительностью вполне нормально, можно же заполнить объект типа массив данными, отправить разом и обратно получить результат обработки.
Вот если по одному дергать тут да будет печально.
Ну накладные расходы на сериализацию/десериализацию кроме передачи.
   Serginio1
 
79 - 07.05.20 - 19:10
(75) Зато сжимается прекрасно. Для Rest есть swagger. Например ODATA описание как на WSDL так и на JSON. Просто на XML хорошо описывать данные. Заметь что 1С экспортирует XSD
   Гений 1С
 
80 - 12.05.20 - 10:40
И все же я не хочу на Rest, буду пробовать на Си, благо интерес к биометрии сохраняется.
Может кто подскажет пример Native компоненты на Си?
   Serginio1
 
81 - 12.05.20 - 11:13
На С или С++?
   Garykom
 
82 - 12.05.20 - 11:21
(80) На pure C пример ВК если найдешь скажи.
На C++ оно на ИТС
   Serginio1
 
83 - 12.05.20 - 11:35
(82) Тебе проще пример лазаруса переписать.
(80) Посмотри мою реализацию как пример https://habr.com/ru/post/304482/
   Гений 1С
 
84 - 12.05.20 - 12:54
(82) на итс? отлично, гляну.
   Garykom
 
85 - 12.05.20 - 12:55
(84) "О сколько нам открытий чудных"
   v77
 
86 - 12.05.20 - 12:57
следующий пост будет "Ой там какие то плюсики и скобочки. Как мне сделать ВК на Си попроще?"
   Garykom
 
87 - 12.05.20 - 13:11
(86) Там хотя бы просто готовый пример ВК на C++ скомпилить уже прогресс.
На последней VS это не "из коробки".
   Serginio1
 
88 - 12.05.20 - 13:29
Проще переписать под  VB.Net, а там проставил anyCpu и будет загружаться как 32 или 64


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.