• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Внешние компоненты. Проблема подключения к Dll

  • Автор темы YarlikovaE
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Y

YarlikovaE

Помогите решить проблему!

Нужно подключить к 1С 8.х dll-библиотеку с незамысловатым функционированием. Например, функция MySumm(a,c). Возможно ли это сделать без создания COM - сервера?
Что необходимо написать в модуле внешней обработки 1С 8.х, если название библиотеки "Sm.dll"?
Библиотека написана в Delphi и содержит только одну функцию MySumm (возвращает значение Real)/

Данные из книги Попова не приводить: слишком сложный пример.

Встречала такой пример:

ЗагрузитьВнешнююКомпоненту("Math.dll");
МФ = Новый("Addln.Math");
Сообщить(МФ.RAND());

Но исходя из объяснений которые я встречала, что эту простую функцию как RAND() (генерацию случайной величины), можно реализовать только путем организации СOM-сервера?
Или все можно обойтись без этих сложностей и обратиться напрямую к функции dll- библиотеки, без СOM-сервера?
 
Y

YarlikovaE

И что для реализации простой функции необходимо писать создание целого сервера? Или все же можно обойтись каким то минимальным написанием кода dll?
 
T

thinkfast

Моя написана на С# поэтому про Delphi ничего не скажу:
Но вот что нашол у себя


И еще на mista.ru 100% на форуме видел рабочий пример для Дельфи помню еще плевался что это не Шарп был)

Как это в 1С:

вариант А: (Если библиотека зарегестрирована)
ПодключитьВнешнююКомпоненту("AddIn.SimpleExternalComponent");
мояВК = Новый COMОбъект("MyComponent"); // Создание объекта из внешней компоненты
Ответ = мояВК.Print(); //Вызов нашего метода

Вариант Б: (Если библиотека не зарегестрирована, и лежит в файле)
лФайл = Новый Файл("\\Prime\Base\MyDLL.dll"); // Полный путь
Если лФайл.Существует() Тогда
Попытка
ЗагрузитьВнешнююКомпоненту(лФайл);
мояВК = Новый COMОбъект("Addin.MyComponent"); // Создание объекта из внешней компоненты
Ответ = мояВК.Print(); //Вызов нашего метода
Предупреждение("Готово " + Ответ);
Исключение
Сообщить("Внешняя компонента не найдена");
КонецПопытки;
КонецЕсли;

И как итог без Com не получится;
Что то накорябал мб поможет =)
 
V

vitfil

Еще раз:
Либо СОМ полноценный, либо Технология Внешних компонент от 1С, что по сути - тот же СОМ, только урезанный.
 
Y

YarlikovaE

Подскажите как создать объект библиотеки dynwrap.dll в 1Сv8.

Код использования библиотеки в 1Сv7:

Wrapper = CreateObject("DynamicWrapper");
Wrapper.Register("MyDll.DLL", "MyFun", "i=ll", "f=s", "r=l");

(подробнее про библиотеку можно посмотреть .

Так же попыталась использовать в 1Сv8, но DynamicWrapper, неопределенный тип

Пробовала таким образом:
Wrapper = New("DynamicWrapper");
Wrapper.Register("MyDll.dll", "MySumm", "i=dd", "f=s", "r=c");
 
Y

YarlikovaE

Надо так:
Wrapper = New COMОбъект("DynamicWrapper");
Wrapper.Register("MyDll.dll", "MySumm", "i=dd", "f=s", "r=l");
 
V

vitfil

YarlikovaE, я вам ссылку не с просто так давал... В 1С8.2 изменилась технология загрузки внешних компонент. Для совместимости оставили вариант, используемый в более ранних версиях, но, насколько я помню, он не работает в режиме управляемого приложения на тонком клиенте.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!