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

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

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

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

Тут редко какая готовая кода на cpp в шаблоне ВК взлетит, а уж что память надо у 1С просить это гм.
23 H A D G E H O G s
 
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);
}
24 Garykom
 
гуру
18.01.20
17:45
(23) Плиз покажи код ToV8StringJni()
Мне интересно в Java или в C++ WCHAR_T* делаешь
25 H A D G E H O G s
 
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;
}
26 Гений 1С
 
гуру
18.01.20
17:50
(22) ну а на чем пишут уваще?
27 Garykom
 
гуру
18.01.20
17:53
(26) Под винду Visual Studio последнюю 2019 бери
28 NorthWind
 
18.01.20
17:55
(23) и... чо? Где пугаться?
29 H A D G E H O G s
 
18.01.20
17:59
(28) Да пугаться не надо. Надо просто охеревать, какой херней можно страдать на ровном месте и гордо бить в грудь "Мы C++, мы преодолеваем"
30 Garykom
 
гуру
18.01.20
18:03
(29) Имхо C++ редкостное извращение после логичного и понятного просто C
Придумщик был извращенцем но вот во что превратили его придумку создатели компиляторов и пользователи-разрабы это просто пиздец.
31 H A D G E H O G s
 
18.01.20
18:06
(30) Я C не видал, но C++ создали редкостные епланы.
32 Garykom
 
гуру
18.01.20
18:10
(31) С это просто конфетка, чисто технически С++ он сейчас не знаю но изначально код на С++ конвертировался в C код и компилировался на имеющихся С компиляторах.

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

Короче если убрать из С++ классы и все лишнее то останется нечто похожее на ЯП 1С :)
33 ДенисЧ
 
18.01.20
18:25
Собрались два неосилятора и хают нормальный язык... )))
34 NorthWind
 
18.01.20
18:56
(30) вообще-то болячки у них одни и те же, вернее говоря, болячки Си перешли по наследству к С++. Так что насчет конфетки вопрос сложный.
В плюсах хоть смарт-поинтеры есть, всяко меньше головняка с освобождением кучи.
35 Garykom
 
гуру
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++, чтобы там чего то совместить. А ты хочешь нихера не понимая дальше хеловорда, взять и разобраться в сложном проекте.
38 Garykom
 
гуру
19.01.20
21:31
(37) Я достаточно понимаю чтобы по отдельности оно работало и простые допилки, да не сильно дальше от хелловорда но вот это меня вводит в ступор.

Гм оно заработало!
Оказалось сам скосячил.
https://i.paste.pics/c48430cc23b45ada37d9823ccbaf070a.png
https://i.paste.pics/dd225203de459e7cd5609cda3f4c4a75.png
https://i.paste.pics/b1320489a0ac4a5719068ecf936b9fe2.png
39 Garykom
 
гуру
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 сервер/клиент.
40 Garykom
 
гуру
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с из внешней компоненты не исполнишь,то есть прокладка нужна.
а рассылка события всем формам,это тоже из области,мы сначала сделали,а потом подумали.
44 Garykom
 
гуру
20.01.20
08:59
(41) (42) Так можно хоть на OneScript будет писать "ВК" для 1С же.
К этой моей ВК в добавок сваять примеры на разных ЯП включающие клиент/сервер http и пусть 1Сники пишут на чем знают.
45 Garykom
 
гуру
20.01.20
08:59
(43) Нафик-нафик просто tcp, да можно но не хочу ибо пройденный этап уже.
46 Garykom
 
гуру
20.01.20
09:01
(43) >код в 1с из внешней компоненты не исполнишь,то есть прокладка нужна

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

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

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

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