Имя: Пароль:
1C
1С v8
ВК Delphi использование на клиенте 1с8.3
, ,
0 sagitt
 
20.05.18
16:38
Скомпилировал проект-пример Внешней компоненты
https://kb.mista.ru/article.php?id=319

получил DLL.
Зарегистрировал ее в системе (Regsvr32 testvk.dll)
Теперь необходимо использовать ее в 1С. Для этого написал внешнюю обработку и в ней:

&НаКлиенте
Процедура Команда1(Команда)
    путь="C:\1\Шаблон ВК\TestVK\DLL\testvk.dll";
        а=ПодключитьВнешнююКомпоненту(ПУТЬ);
        ЗагрузитьВнешнююКомпоненту(Путь);
        ОБ = Новый ("Addln.TestVK");
конецпроцедуры

Возникает ошибка на ЗагрузитьВнешнююКомпоненту(Путь);

Эта тема уже обсуждалась https://www.forum.mista.ru/topic.php?id=455572
Но к сожалению там нет законченного кода для вызова хоть какой нибудь функции ВК.

Подскажите пожалуйста, как правильно подключить эту компоненту.
Оговорюсь сразу, что мне надо будет писать свой функционал, но на первом этапе хочу разобраться с готовым примером.
1 Сияющий в темноте
 
20.05.18
18:11
Либо загрузить dll,где в ресурсе 100 все progid
Либо подключить по progid после регистрации
если делать и то и другое,то будет ошибка

А теперь вопрос-зачем вам Вк?
2 H A D G E H O G s
 
20.05.18
19:16
Вот полный кусок всеобъемлищего кода по подключению внешних компонент.

Функция ПодключитьКомпонентуРасширенногоФункционала(Предварительно=Ложь)
    РежимОтладки=Ложь;
    ПутьКМакетуСКомпонентой="Обработка.АСФОбщиеФормыКомандыИМакеты.Макет.АСФКомпонентаРасширенногоФункционала";
    
    Если РежимОтладки=Истина Тогда
        Информация=Новый СистемнаяИнформация;
        Если Информация.ТипПлатформы=ТипПлатформы.Windows_x86_64 Тогда
            Возврат ПодключитьВнешнююКомпоненту("C:\Projects\ExtendedFunc\x64\ExtendedFunc.dll","Alcosphere",ТипВнешнейКомпоненты.COM);
        Иначе
            Возврат ПодключитьВнешнююКомпоненту("C:\Projects\ExtendedFunc\x32\ExtendedFunc.dll","Alcosphere",ТипВнешнейКомпоненты.COM);
        КонецЕсли;
    Иначе
        #Если Клиент Тогда
            Результат=ПодключитьВнешнююКомпоненту(ПутьКМакетуСКомпонентой,"Alcosphere",ТипВнешнейКомпоненты.COM);
            Если Результат=Истина Тогда
                Возврат Истина;
            КонецЕсли;
            Если Предварительно Тогда
                НачатьУстановкуВнешнейКомпоненты(Неопределено,ПутьКМакетуСКомпонентой);
                Возврат Истина;
            КонецЕсли;
            УстановитьВнешнююКомпоненту(ПутьКМакетуСКомпонентой);
        #КонецЕсли
        Возврат ПодключитьВнешнююКомпоненту(ПутьКМакетуСКомпонентой,"Alcosphere",ТипВнешнейКомпоненты.COM);
    КонецЕсли;
КонецФункции

Функция ПолучитьОбъектРасширения() Экспорт
    ИмяОбъекта="Extension";
    #Если Клиент Тогда
        Если АСФСтруктураСОбъектамиРасширения=Неопределено Тогда
            Результат=ПодключитьКомпонентуРасширенногоФункционала();
            Если Результат=Ложь Тогда
                Возврат Неопределено;
            КонецЕсли;
            АСФСтруктураСОбъектамиРасширения=Новый Структура;
        КонецЕсли;
    #Иначе
        АдресСтруктурыСОбъектами=ПараметрыСеанса.АСФАдресСтруктурыСОбъектамиРасширения;
        Если АдресСтруктурыСОбъектами="" Или Не ЭтоАдресВременногоХранилища(АдресСтруктурыСОбъектами) Тогда
            Результат=ПодключитьКомпонентуРасширенногоФункционала();
            Если Результат=Ложь Тогда
                Возврат Неопределено;
            КонецЕсли;
            
            АСФСтруктураСОбъектамиРасширения=Новый Структура;
            ПараметрыСеанса.АСФАдресСтруктурыСОбъектамиРасширения=ПоместитьВоВременноеХранилище(АСФСтруктураСОбъектамиРасширения,Новый УникальныйИдентификатор());
        Иначе
            АСФСтруктураСОбъектамиРасширения=ПолучитьИзВременногоХранилища(АдресСтруктурыСОбъектами);
        КонецЕсли;
    #КонецЕсли
    Результат=Неопределено;
    Если АСФСтруктураСОбъектамиРасширения.Свойство(ИмяОбъекта)=Истина Тогда
        Результат=АСФСтруктураСОбъектамиРасширения[ИмяОбъекта];
        Если Результат=Неопределено Тогда
            ПодключитьКомпонентуРасширенногоФункционала();
        КонецЕсли;
    КонецЕсли;
    Если Результат=Неопределено Тогда
        Попытка
        Результат=Новый ("Addin.Alcosphere."+ИмяОбъекта);
        Исключение
            АСФОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось создать объект 'Addin.Alcosphere.'"+ИмяОбъекта+" по причине: "+ОписаниеОшибки());
        КонецПопытки;
        АСФСтруктураСОбъектамиРасширения.Вставить(ИмяОбъекта,Результат);
    КонецЕсли;
    Возврат Результат;
КонецФункции
3 H A D G E H O G s
 
20.05.18
19:20
Но, если кратко, Вам достаточно этого
путь="C:\1\Шаблон ВК\TestVK\DLL\testvk.dll";
Результат=ПодключитьВнешнююКомпоненту(путь,"AveRomix",ТипВнешнейКомпоненты.COM);

Если Результат=Ложь Тогда
Возврат;
КонецЕсли;

#Если Клиент Тогда
УстановитьВнешнююКомпоненту(путь);
#КонецЕсли;
Результат=Новый ("Addin.AveRomix.TestVK");
4 sagitt
 
20.05.18
21:16
Большое спасибо.
Уважаемый  H A D G E H O G, попробовал предложенный вами код,но почему-то у меня ПодключитьВнешнююКомпоненту(путь,"AveRomix",ТипВнешнейКомпоненты.COM)
возвращает ЛОЖЬ. Видимо что-то я не так делаю.

Проверил, в реестре появился ключ "Addin.TestVK"

По приведенному мной адресу можно скачать проект с уже скомпилированным компонентом. Вы не пробовали проверять предложенный код с этим примером?
5 sagitt
 
20.05.18
21:21
Уважаемый Сияющий в темноте!
Первый раз пытаюсь сделать ВК, возможно вопрос покажется глупым,поясните пожалуйста, что значит
"Либо загрузить dll,где в ресурсе 100 все progid".

А ВК потребовалась в связи с необходимостью управлять исполнительным устройством через COM-порт (виртуальный, на самом деле железо через USB работает).
6 H A D G E H O G s
 
20.05.18
23:32
(4) Я на основе testVK все свои проекты сделал.
7 H A D G E H O G s
 
20.05.18
23:35
(5) Он говорит про многообъектную ВК, чтобы написать ее, требуется в dll добавить строковый ресурс по адресу 100, с перечислением всех объектов через разделитель |, ну, например

STRINGTABLE
{
100, "Extension|Sign"
}
8 sagitt
 
21.05.18
00:13
(6) А может моя проблема быть связана с тем, что используется Win7 x64? Есть какие-нибудь особенности создания ВК для 64-разрядных систем?

(7) В примере TestVK вообще текстовые ресурсы не подключаются я правильно понимаю, что это не обязательно?
Ведь мне не нужно доп объектов, достаточно одного.
9 H A D G E H O G s
 
21.05.18
00:50
(8) с тем, что используется Win7 x64?
нет

а вот с тем, что используется 1С64 - да. Если и клиент 64-х - надо компилировать проект под платформу x64
10 sagitt
 
21.05.18
08:09
А можно из под Delphi7 как-то это сделать?(скомпилировать под x64)
11 H A D G E H O G s
 
21.05.18
09:26
(10) Нет
Только начиная с XE2 вроде.
12 Кирпич
 
21.05.18
09:51
(10) скачай Lazarus и компилируй что хошь и на что хошь.
13 Кирпич
 
21.05.18
09:52
14 sagitt
 
21.05.18
20:53
Спасибо за совет и ссылку.
Попробую.