Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 сен 2024, 06:29

Как выяснить, почему не загружается внешняя компонента ?

Автор Lun, 26 сен 2024, 21:41

0 Пользователей и 1 гость просматривают эту тему.

Lun

Добрый вечер!
Решил написать элементарную внешнюю компоненту на 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 ?

4) Решил посмотреть в отладчике VS - запускается ли CAddInNative::Init, который должен вроде запускаться первым, но не тут-то было.
В VS я собираю проект, создается моя DLL, запускаю конфигуратор 1С, потом через него - саму платформу 1С,
В отладчике VS даю команду - присоединиться к процессу. Здесь все OK,
однако когда ставлю точку останова в этом ...::Init отладчик VS говорит, что попадание в нее не произойдет - нет
отладочных символов.
Однако я собирал проект VS для Debug x64, т.е. для отладки и вижу, что файл отладочных символов *.PDB лежит в той же папке, что и DLL- в чем тогда проблема ?

Помогите, пожалуйста, двинуться далее в сторону решения проблем, что и где посмотреть - пока не знаю, как ее сдвинуть с места.

Максим75

Lun, попробуйте если не подключена установить компоненту
УстановитьКомпоненту(DLL)

если и не помогает, попробуйте компоненту запихнуть в общий макет в конфигурации и уже обращаться к этому общему макету.

вот пример:
// При открытии формы подключим ВК для работы с камерой
Если НЕ ПодключитьВнешнююКомпоненту("ОбщийМакет.MediaBuild", "Компонента", ТипВнешнейКомпоненты.Native) Тогда
    //Если не удалось подключить ВК, предложим установить её
    УстановитьВнешнююКомпоненту("ОбщийМакет.MediaBuild");
    ПодключитьВнешнююКомпоненту("ОбщийМакет.MediaBuild", "MB", ТипВнешнейКомпоненты.Native);
КонецЕсли;
 
Попытка
    MediaBuild = Новый("AddIn.MB.MediaExtention ");
Исключение
    Сообщить("Не могу создать объект из компоненты");
    Сообщить(ОписаниеОшибки());
    Возврат;
КонецПопытки;

Lun

Максим75, спасибо за совет - будут пробовать.
Меня смутило использование УстановитьВнешнююКомпоненту, т.к. в документации написано следующее:

Подключение внешней компоненты в тонком клиенте или в веб-клиенте (на примере Native API компоненты)

Для подключения внешней компоненты в тонком клиенте или веб-клиенте используются методы глобального контекста ПодключитьВнешнююКомпоненту() и УстановитьВнешнююКомпоненту() (причем метод УстановитьВнешнююКомпоненту() используется только тогда, когда внешняя компонента расположена не на диске).

У меня DLL на диске - а зачем тогда вызывать Установить..., ведь в доке написано, что вызывается, когда ВК находится не на диске ?



Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск