Регламентные задания и внешние компоненты #551189


#0 by ecspertiza
При выполнении регламентного задания пробую подключить внешнюю компоненту ЗагрузитьВнешнююКомпоненту("BhsUF.dll");         в консоли заданий вижу что задание валиться на ЗагрузитьВнешнююКомпоненту , из за чего это может происходить? Регламентные задания запускаются на сервере, дллка есть, причем есть как в папке bin каталога 1С так и навсякий случай в system32 положил. ВК писал сам, и если с ней работать не из регламентных заданий ,то все хорошо отрабатывает.
#1 by RomaH
права пользователя под которым сервер работает
#2 by ecspertiza
права сейчас ради интереса админа выставил, ничего не изменилось, правда не знаю нужно ли было сервер перезапускать
#3 by RomaH
... а уверен что ЗагрузитьВнешнююКомпоненту доступно на сервере? .. на 8,2 - доступно только на толстом клиенте (т.е. только клиенское приложение)
#4 by RomaH
... Попытка исключение - и описание ошибки в журнал
#5 by ecspertiza
ЗагрузитьВнешнююКомпоненту("C:BhsUF.dll");     Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту): Ошибка при загрузке внешней То бишь получается что в Регламентных заданиях не вызовешь ф-цию из ВК ? Просто нужно decode base64 я как бы ВК написал, она работает хорошо, но вот как ее с рег. заданиями подружить пока ума не приложу
#6 by Serginio1
Смотри для ЗагрузитьВнешнююКомпоненту Доступность : Толстый клиент. В серверном варианте только Native API. А зачем тебе ВК? Сом не проходит. По сути обратных вызовов тебе ненадо, а все остальное ты и через СОМ подключение можешь вытащить?
#7 by Serginio1
Сейчас посмотрел на ПодключитьВнешнююКомпоненту, то вроде нет ограничения на СОМ для 8.2
#8 by Serginio1
А вообще то есть Base64Значение,Base64Строка
#9 by ecspertiza
сейчас разбираюсь с ПодключитьВнешнююКомпоненту ,но что то она не работает тоесть возвращает Ложь Они возвращают двоичные данные ,а мне хотелось бы из base64 строки получить текст ибо в ней именно текст зашифрован
#10 by ecspertiza
Com подключение - это через COMОбъект ?
#11 by Serginio1
Да например
#12 by Serginio1
Кстати у тебя сервер то какой не 64 разрядный?
#13 by ecspertiza
сервер 32ух разрядный при вызове по колдую пока, чувствую что где то косячу, если что DCOM запущен и тип запуска у него авто )))
#14 by бомболюк
надо оформить КОМ объект не как ActiveX Control, а как ActiveX Library.Проверял, работает, даже на VB.
#15 by Serginio1
Так зарегистрируй её. Она на чем? И поддерживает ли IDispatch
#16 by ecspertiza
Дллку регистрировал :) если под этим подразумевается regsvr32. Написана она на C++ пример брал с диска ИТС. После того как добавил в интерфейсы IDispatch из толстого клиента начала работать ф-ция ПодключитьВнешнююКомпоненту, но с сервера не работает. А при ДЛЛ = Новый COMОбъект("компонента") теперь новая ошибка "Недопустимая строка с указанием класса" вообщем как то все не просто :)
#17 by бомболюк
Внешние компоненты - это одно. ActiveX Library - это другое. Первое не работает на сервере, второе работает.
#18 by Serginio1
А посмотри в регистре какой ProgID для твоей DLL
#19 by ecspertiza
И как из готовой компоненты сделать ActiveX Library ? Переписывать все с нуля не вариант :) AddIn.AddInCOM.1 пробовал подключать и с 1ей и без
#20 by ecspertiza
Стало быть и создаю так ДЛЛ = Новый COMОбъект("AddIn.AddInCOM")
#21 by Serginio1
И не находит?
#22 by Serginio1
Создай простую реализацию Idispatch без реализации других интерфейсов. Еще раз повторю на ком сервере интерфейсы 1С тебе не нужны.
#23 by ecspertiza
Сделал вот что, создал новый проект ATL создал в нем класс и две ф-ции шифрования и дешифрования данных, теперь ДЛЛ = Новый COMОбъект("компонет") работает хорошо и вызывает нужные функции, и на серверной стороне тоже, жаль что пришлось вынести эти ф-ции из основной компоненты, но зато заработало :)
#24 by Serginio1
А вообще используй Там доступ ко всем компонентам Net
#25 by ecspertiza
спасибо, попробую :)
#26 by Serginio1
А вобще для ВК я уже очень давно использую   там есть ВК которая загружает Объект Автоматизации поддерживающий ITypeInfo и выполняет все его свойства и методы через IlanguageExtender. То есть делаю обычный объект автоматизации в котором реализую один метод public void InitFrom1C(object Object1C) и получаю все интерфейсы. И всё же C# могуч. Понадобилось использовать СОМ порты, а т.к. уже использовалась ВК для обмена по TCP/IP. Код на лямдах очень лаконичен public void ПодключитьСканер(int НомерПорта)        { Sc это Контекст синхронизации
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям