|
Почему не загружается внешняя компонента? | ☑ | ||
---|---|---|---|---|
0
Prog1
naïve
01.10.24
✎
10:52
|
Добрый вечер!
Решил написать элементарную внешнюю компоненту на C++ (VisualStudio 2019). конфигурация на управляемых формах. Версия 1С - 8.3.8, учебная (как я понял, в учебной можно использовать внешние компоненты - нельзя COM-соединения). Подключаю внешнюю компоненту в 1С так: DLL = "d:\ExtComp1.dll"; Имякомпоненты = "CAddInNative"; КомпонентаПодключена = ПодключитьВнешнююКомпоненту(DLL, Имякомпоненты, ТипВнешнейКомпоненты.Native); если не КомпонентаПодключена тогда сообщить("Ошибка подключения компоненты."); возврат; конецесли; Получаю сообщение об ошибке - ошибка подключения... Как выяснить, в чем дело ? Файл DLL существует. Мой класс C++ - за основу взял template 1C: class CAddInNative : public IComponentBase { ... Возникли следующие проблемы и вопросы: 1) Можно ли получить какое-то расширенное сообщение об ошибке - что не нашла 1С, что ей не понравилось ? 2) Правильно ли я понимаю, что мой класс в C++ "CAddInNative" - это и есть имя компоненты ? 3) Все, что я предлагаю 1С для загрузки - это DLL. Макета с двоичными данными, манифеста, других файлов я не создавал. Достаточно ли только файла DLL ? Помогите, пожалуйста, двинуться далее в сторону решения проблем, что и где посмотреть - пока не знаю, как ее сдвинуть с места. |
|||
1
Kongo2019
28.09.24
✎
19:42
|
(0) procmon глянь
|
|||
2
lEvGl
гуру
29.09.24
✎
16:19
|
правильно сделанную компоненту если не установлена, надо сначала установить, потом подключить, логика вроде такой
Если Не Подключить() Тогда Установить(); Подключить(); КонецЕсли; файл таскать за собой не надо, общий макет с типом ДвочиныеДанные, ее туда ну а сама компонента на ++ в ИТС написана, больше чем там есть нигде найти пожет и получится, но незачем Можно ли получить какое-то расширенное сообщение об ошибке - что не нашла 1С, что ей не понравилось ? Можно студией подключить отладку к нужному процессу, даст отладочный указатель в проекте ++ов. Но вряд ли вам поможет описание ошибки про маршалинг, например Правильно ли я понимаю, что мой класс в C++ "CAddInNative" - это и есть имя компоненты ? если не ошибаюсь, то имя интерефейса ПрогИД это ее имя. Обычно класс и ПрогИД называются одинаково, но могут быть и фантазии Макета с двоичными данными, манифеста, других файлов я не создавал. а что так |
|||
3
osa1C
29.09.24
✎
21:03
|
Сообщить("Ошибка подключения компоненты.");
замени на Сообщить("Ошибка подключения компоненты.", СообщениеОбОшибке()); и прочитай расширенное сообщение об ошибке Там будет много что понятно, но если останутся вопросы пиши |
|||
4
Garykom
гуру
29.09.24
✎
21:03
|
||||
5
Garykom
гуру
29.09.24
✎
21:03
|
(0) вместо учебной используй обычную платформу и лицензии для разработчиков
|
|||
6
osa1C
29.09.24
✎
21:08
|
(5) за такое по ушам не бьют? Где он возьмет не учебную платформу?
Купит? Не за дорого... Раз учебная - значит студент |
|||
7
Garykom
гуру
29.09.24
✎
21:14
|
(6) скачает там же где лицензия для разработчика
https://infostart.ru/1c/articles/1844839/
|
|||
8
H A D G E H O G s
30.09.24
✎
00:28
|
(0) attach to process, или как там у вас, ищем твой 1cv8c.exe или rphost.exe, подключаемся. Dll должна быть скомпилена в режиме debug. Точку останова в vs studio в dllmain, если его нет - реализовать. Смотрим - заходит или нет. Если не заходит - procmon и смотрим куда стучится 1С и какой отлуп получает от windows.
P.s. Если под rphost будете подключатся - долго на точке останова не сидите, пройдет секунд 10 и rmmngr посчитает rphost зависшим и срубит его, надо все делать быстро. Ну или каких нибудь виндовых привилегий отладки добавить, не разбирался. |
|||
9
Prog1
naïve
30.09.24
✎
22:15
|
Всем спасибо за участие!
Проблему удалось решить - компонента подключается успешно. |
|||
10
Kongo2019
30.09.24
✎
22:52
|
(9) Но нам ты об это конечно уже не расскажешь, да?
|
|||
11
H A D G E H O G s
30.09.24
✎
22:52
|
(9) Вот это именно то, что встречаешь на форумах и хочется выхватить маузер и ехать искать автора такого поста, что спросить:
1. Как ты это решил и в чем была проблема. 2. Что вами движет, когда вы бодро рапортуете об успехе и не пишите пункт 1? |
|||
12
Волшебник
01.10.24
✎
08:55
|
(9) Как решили?
|
|||
13
Prog1
naïve
01.10.24
✎
21:15
|
Проблема была в том, что не только внешнюю компоненту, но и DLL я создавал впервые.
Поэтому не озаботился экспортом ф-ций, которые должна экспортировать компонента. Как только создал соответствующий файл DEF, экспорт стал реально осуществляться и _ПодключитьВнешнююКомпоненту_ отработала в моем варианте нормально. Т.е. если совсем не фурычит, сначала надо проверить, что комп включен - в смысле, DLL реально экспортирует то, что нужно. Еще далее чуть-чуть помучился с типом свойства компоненты (ее внутреннее поле). Заявил ее тип - VTYPE_INT, присваивал ей значение в C++, но 1C в упор не видела его. Видимо не совсем разобрался с 64 или 32-р. переменными. Сделал для себя вывод, что лучше объявлять не "обобщенный" VTYPE_INT, а конкретный int-тип, например, VTYPE_I4, VTYPE_I2 и т.п. Учебная версия внешние компоненты поддерживает - здесь проблем не оказалось. |
|||
14
Волшебник
01.10.24
✎
22:10
|
(13) Спасибо, что доложили.
Мэтрам достаточно? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |