• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Внешние компоненты. Проблема подключения к 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-сервера?
 
И что для реализации простой функции необходимо писать создание целого сервера? Или все же можно обойтись каким то минимальным написанием кода dll?
 
Моя написана на С# поэтому про Delphi ничего не скажу:
Но вот что нашол у себя


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

Как это в 1С:

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

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

И как итог без Com не получится;
Что то накорябал мб поможет =)
 
Еще раз:
Либо СОМ полноценный, либо Технология Внешних компонент от 1С, что по сути - тот же СОМ, только урезанный.
 
Подскажите как создать объект библиотеки 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");
 
Надо так:
Wrapper = New COMОбъект("DynamicWrapper");
Wrapper.Register("MyDll.dll", "MySumm", "i=dd", "f=s", "r=l");
 
YarlikovaE, я вам ссылку не с просто так давал... В 1С8.2 изменилась технология загрузки внешних компонент. Для совместимости оставили вариант, используемый в более ранних версиях, но, насколько я помню, он не работает в режиме управляемого приложения на тонком клиенте.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab