Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
5 / 5 / 1
Регистрация: 27.10.2016
Сообщений: 66

Вызов внешних dll из COM объекта

24.08.2021, 11:11. Показов 3563. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Решил поэкспериментировать с 1С и подергать из неё шарповский код. Сделал либу, зарегал, вызвал метод из 1С и все заработало.
Но потом мне захотелось отправить из 1С сообщение в телеграм. В результате получилось следующее:
{Форма.Форма.Форма(5)}: Ошибка при вызове метода контекста (PushMessage)
КомОбъект.PushMessage("Hello from 1C");
по причине:
Произошла исключительная ситуация (Telegram1C): Не удалось загрузить файл или сборку "Telegram.Bot, Version=16.0.2.0, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Требуется сборка со строгим именем. (Исключение из HRESULT: 0x80131044)
Telegram.Bot - это внешняя либа. Я правильно понимаю, что COM объект не может вызывать внешние dll, нужно производить с ней те же манипуляции, которые я делал со свой сборкой, чтобы она стала доступной через COM?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.08.2021, 11:11
Ответы с готовыми решениями:

Вызов Com-объекта из DLL
Есть COM-сервер, написан как NT-сервис. Если я вызываю его из exe, все работает, Если пытаюсь вызвать сервер из длл - exception. Все...

Вызов фиункций из внешних файлов
Хочу добавить к проги возможность подключения плагинов Total Commander. Если кто не знает, они организованы в виде отдельных dll или...

Вызов getprocaddress в сервисе. не работает вызов dll
всем здравия желаю! есть программа. она выполняет getprocaddress и вызывает полученную функцию — без проблем. делаю то же самое в...

5
 Аватар для kernel_mode
70 / 47 / 16
Регистрация: 21.07.2021
Сообщений: 187
25.08.2021, 18:16
Очень похоже на то, скорее всего вы нарушили иерархию загрузок библиотек.

Можно попробовать поменять локальный путь загрузки библиотеки, если загрузка осуществляется в используемой DLL, то все получится. Если нет, придется искать DLL, с которого все начинается.

Рекомендую взять IDA в руки, поставить bpt на WinApi LoadLibrayA и смотреть, откуда идет подгрузка библиотеки для телеграмма.

Можно еще скопировать эту библиотеку в папку с проектом, чтобы убедиться, что дело в ней.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
25.08.2021, 21:55
Цитата Сообщение от _Kirill Посмотреть сообщение
Telegram.Bot - это внешняя либа. Я правильно понимаю, что COM объект не может вызывать внешние dll, нужно производить с ней те же манипуляции, которые я делал со свой сборкой, чтобы она стала доступной через COM?
Цитата Сообщение от _Kirill Посмотреть сообщение
Требуется сборка со строгим именем.
Если твоя сборка имеет strong name (подписана сертификатом), то и все зависимости должны иметь strong name. Это требование .NET.
0
5 / 5 / 1
Регистрация: 27.10.2016
Сообщений: 66
26.08.2021, 10:49  [ТС]
Спасибо за ответ!
Я понимаю, в ошибке это написано. Но что мне необходимо в такой ситуации сделать?
Взять исходники, подписать их и скомпилить?
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
26.08.2021, 20:11
Лучший ответ Сообщение было отмечено _Kirill как решение

Решение

_Kirill,

Можно подписать и без исходников:
Code
1
2
1. ildasm /all /out=Telegram.Bot.il Telegram.Bot.dll 
2. ilasm /dll /key=myKey.snk Telegram.Bot.il
Потом обновить ссылку в вашем проекте и сделать ребилд.

Сложнее если Telegram.Bot тоже содержит ссылки на другие неподписанные dll.
В таком случае их тоже надо подписать, получить public key token используя
Code
1
sn -Tp Other.dll
А потом пропатчить ссылки в Telegram.Bot.il перед выполнением шага #2

Code
1
2
3
4
5
.assembly extern /*23000003*/ Other
{
  .publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )                         
  .ver 10:0:0:0
}
И так рекурсивно для всех неподписанных зависимостей.

https://stackoverflow.com/a/331555/852284

Добавлено через 2 минуты
Очень вероятно что это можно автоматизировать или найти для этого готовый инструмент, ибо вопрос популярный.

Добавлено через 5 часов 46 минут
Вот например какая то приблуда, по заверению автора сделает все сама https://brutaldev.com/post/NET... ame-Signer
1
5 / 5 / 1
Регистрация: 27.10.2016
Сообщений: 66
27.08.2021, 11:33  [ТС]
Попробовал - Telegram.Bot подписался, но прога отстегнула ему какие-то зависимости, в результате теперь падает из-за какого-то не найденного файла. Подозреваю, что отвалился Newton.Json.
Думаю, проще не выдумывать и слать запросы в веб сервис из 1С.
Но в любом случае, спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.08.2021, 11:33
Помогаю со студенческими работами здесь

Вызов функции из dll. Dll не определена в коде и подключается программно
Я написал простую функцию которая возвращает негатив bitmap'а Function Negative(ByVal Bmp As Bitmap) Dim Bmp2 As New...

Методы внешних DLL
Я не знаю куда это писать. в раздел c++ или c#. Не получается импортировать метод из dll написанной на C++ код H-файла: #ifndef...

Inject dll, а также вызов функции из этой же dll
Всем привет, заинжектить dll в другой процесс получилось, но еще необходимо вызвать функцию в этой длл, каким образом это реализовать? ...

Вызов анимации объекта из скрипта другого объекта
Здравствуйте! Как правильно установить анимацию на другой объект из скрипта? Пробовал много разных вариантов, вот один из них: ...

Dll без внешних зависимостей?
Добрый день, Волею судьбы приходится писать программы для C++Builder XE8. К несчастью, библиотеки для работы с матрицами (решения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru