![]() |
|
Использование асинхронной библиотеки обмена сообщениями "ZeroMQ". Нужна помощь. | ☑ | ||
---|---|---|---|---|
0
Varlant1n
09.12.21
✎
16:16
|
Здравствуйте, дорогие форумчане. Столкнулся с проблемой при использовании библиотеки ZeroMQ. У меня стоит задача с интеграцией 1С с определенным аппаратом (сути не имеет каким). Обмен сообщений с данным аппаратом прописан с использованеим асинхронной библиотеки обмена сообщениями "ZeroMQ". Я скачал последнюю версию данной библиотеки с "https://www.nuget.org/packages/NetMQ/". Кое-как зарегистрировал через PowerShell:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe C:\netmq.4.0.1.6\lib\netstandard2.0\NetMQ.dll. Регистрация прошла успешно. Теперь же я должен из 1С послать на аппарат JSON строку. Формирование JSON тоже прописано. Абсолютно все прописано. Главная проблема в том, что я не могу покдлючиться, а точнее использовать библиотеку "ZeroMQ". Пробовал так: ZeroMQ = Новый ComОбъект("NetMQ"); Но 1С ругается на то, что класс не зарегистрирован. Может кто из вас работал с данной библиотекой в рамках 1С. Можете пожсказать как я могу общаться к методам из данного DLL файла. В сай DLL есть метод "Connect", который единственным параметром требует строку с IP и Порт, но использовать "Connect" я не могу, так как 1C говорит, что класс не зарегистрирован. Заранее всем спасибо за помощь! И спасибо за уделенное время! |
|||
1
pechkin
09.12.21
✎
16:19
|
кастую в тему NetObjectToIDispatch45
|
|||
2
DrShad
09.12.21
✎
16:26
|
вангую что библиотека нативаня
|
|||
3
Varlant1n
09.12.21
✎
16:27
|
(2) А если отталкиваться от того, что она нативная. Есть возможность использования методов данной библиотеки в 1С?
|
|||
4
pechkin
09.12.21
✎
16:27
|
(2) это же библиотека под .Net и вызывать ее нужно из .Net
|
|||
5
pechkin
09.12.21
✎
16:28
|
(3) возможность есть, гугли (1). Может и автор заглянет
|
|||
6
acht
09.12.21
✎
16:31
|
(0) > с определенным аппаратом (сути не имеет каким)
Очень Секретный Кассовый Аппарат, ага. > Но 1С ругается на то, что класс не зарегистрирован. Откуда появилась мысль, что там все ComVisible? |
|||
7
acht
09.12.21
✎
16:32
|
(2) > библиотека нативаня
Боже упаси, там чистый c#, который про 1С в страшном сне не знает |
|||
8
acht
09.12.21
✎
16:32
|
(1) > кастую в тему NetObjectToIDispatch45
Пребиваю каст призывом гарикома. Микросервис на го! |
|||
9
Varlant1n
09.12.21
✎
16:34
|
(7) При этом точно подобную библиотеку "pdTcpIpService", которая была собрана на основе "NetMQ" тоже на чистом С#, я смог использовать через ComОбъект. И мне доступны все методы.
|
|||
10
acht
09.12.21
✎
16:34
|
(8)+ А хотя и сергинио тоже. Ъ! Ъ! Ъ! =]
|
|||
11
Varlant1n
09.12.21
✎
16:35
|
pdTcpIpService= Новый ComОбъект("pdTcpIpService.pdTcpIpManager");
И все методы из бибилиотеки доступны в 1С. |
|||
12
Serginio1
09.12.21
✎
16:35
|
(0) Ну судя по netstandard2.0 подойдет и NetObjectToIDispatch45
https://ru.stackoverflow.com/questions/527763/%d0%9a%d0%b0%d0%ba-%d0%b2%d1%8b%d0%b7%d0%b2%d0%b0%d1%82%d1%8c-%d0%bc%d0%b5%d1%82%d0%be%d0%b4-%d0%b8%d0%b7-c-%d0%b2-1%d0%a1/527802#527802 (9) Она была сделана как ComVisible |
|||
13
acht
09.12.21
✎
16:36
|
(9) Ну правда же, что это _другая_ бибилиотека, с _другим_ кодом?
|
|||
14
УдавВПопугаях
09.12.21
✎
16:37
|
епырст, касты работают
|
|||
15
Kassern
09.12.21
✎
16:38
|
(13) там dll и тут dll, все одинаково же))
|
|||
16
PLUT
09.12.21
✎
16:39
|
||||
17
PLUT
09.12.21
✎
16:40
|
+(16) блин (12) не заметил :)) ссори
|
|||
18
Varlant1n
09.12.21
✎
16:41
|
(15) Именно так))) Ладно, не в тему было, понял, что глупость написал. А за каст в "Serginio1" отдельное спасибо. Будем посмотреть, как говорится. Щас попробую через "NetObjectToIDispatch45".
|
|||
19
Serginio1
09.12.21
✎
16:41
|
(17) Не. Я не худею. Просто ем много и много сжигаю!
|
|||
20
PLUT
09.12.21
✎
16:46
|
||||
21
Varlant1n
09.12.21
✎
17:06
|
Ребят. последний хелп от вас нужен. У меня просто вообще опыта работы с C# нет. Я смог через "NetObjectToIDispatch45" подключиться к dll:
NetObjectToIDispatch45= новый COMОбъект("NetObjectToIDispatch45"); nfrascturcture = NetObjectToIDispatch45.ПолучитьТипИзСборки("NetMQ.INetMQSocket", "C:\netmq.4.0.1.6\lib\netstandard2.0\NetMQ.dll"); В DLL есть метод: .method public hidebysig newslot abstract virtual instance void Connect(string address) cil managed { } // end of method INetMQSocket::Connect У меня есть IP и порт, которые я должен туда послать. Но как вызвать этот метод через NetObjectToIDispatch45? Пробовал NetObjectToIDispatch45.Connect(ip+port), но метод не обнаружен. |
|||
22
polosov
09.12.21
✎
17:33
|
Короче надо засесть как-нибудь и Native API ВК сделать для zeroMQ.
|
|||
23
Serginio1
09.12.21
✎
17:34
|
(21) Открой для себя https://www.jetbrains.com/ru-ru/decompiler/
Стоит почитать https://infostart.ru/1c/articles/448668/ |
|||
24
Serginio1
09.12.21
✎
17:38
|
Ты объект то создал nfrascturcture ?
|
|||
25
Shamandafil
10.12.21
✎
08:11
|
Для работы с этой кассой (ZeroMQ) можно без особых проблем собрать как СОМ объект видимый из 1С без посредников вроде (NetObjectToIDispatch45), так и написать на числом С++ родную для 1С ВК.
А вот кассу для pdTcpIpService писали наркоманы, там всё не по человечески и с силами всё переписать я так и не собрался. |
|||
26
Serginio1
10.12.21
✎
10:06
|
(25) Так или иначе ты будешь писать того же посредника, только вручную. Прелесть NetObjectToIDispatch45 еще и в том, что один раз зарегистрировал и вызываешь любые нетовские сборки (.NetStandard 2). Или можешь сделать свою сборку без COM ограничений (все типы должны быть примитивными или использовать IDispatch)
|
|||
27
Shamandafil
10.12.21
✎
12:02
|
(26) NetObjectToIDispatch45 использовал не раз. Но натив ДЛЛ гораздо удобнее, не требует прав администратора и устанавливается сама.
С другой стороны никакая обёртка не защитит от кривого кода (pdTcpIpService), который использует Dictionary без блокировок в многопоточном коде для хранения журнала событий. Причём этот словарь падает вместе с процессом 1С, если время 2х событий совпадёт (словарь не может хранить одинаковые ключи типа DateTime), самое грустное, что обработчик ошибок сам же эту ошибку и вызывает пытаясь писать в словарь. |
|||
28
Serginio1
10.12.21
✎
12:44
|
(27) В свое время сделал и нативную обертку
Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux https://infostart.ru/1c/articles/534901/ Но как то она не особо пользовалась спросом. Сейчас нужно пересобрать под новые версии https://docs.microsoft.com/ru-ru/dotnet/core/tutorials/netcore-hosting А для линукса добавить условную компиляцию Интерфейсы API среды выполнения .NET Core находятся в coreclr.dll (в Windows), в libcoreclr.so (на платформе Linux) или в libcoreclr.dylib (в macOS). Первым шагом для размещения .NET Core является загрузка библиотеки CoreCLR. Некоторые основные приложения проверяют разные пути или используют входные параметры для поиска библиотеки, пока другие могут загрузить ее по заранее определенному пути (рядом с основным приложением, например, или из известного расположения на компьютере). После обнаружения библиотека загружается с помощью LoadLibraryEx (в Windows) или dlopen (в Linux или macOS). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |