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

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

YarlikovaE

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

Нужно подключить к 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

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

thinkfast

#4
Моя написана на С# поэтому про Delphi ничего не скажу:
Но вот что нашол у себя
http://www.visual.2000.ru/kolesov/pcmag/20...09/pitercom.htm
http://www.rsdn.ru/article/dotnet/cs1c.xml
И еще на mista.ru 100% на форуме видел рабочий пример для Дельфи помню еще плевался что это не Шарп был)

Как это в 1С:

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

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

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

vitfil

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

YarlikovaE

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

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

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

(подробнее про библиотеку можно посмотреть http://www.script-coding.info/dynwrap.html).

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

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

YarlikovaE

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

vitfil

IT-интегратор
02.04.2004
2 062
0
#9
YarlikovaE, я вам ссылку не с просто так давал... В 1С8.2 изменилась технология загрузки внешних компонент. Для совместимости оставили вариант, используемый в более ранних версиях, но, насколько я помню, он не работает в режиме управляемого приложения на тонком клиенте.
 
Статус
Закрыто для дальнейших ответов.