|
Не могу понять, вызывает ли сервер 1С внешнюю компоненту... | ☑ | ||
---|---|---|---|---|
0
max735
30.04.14
✎
11:21
|
Здравствуйте,
пытаюсь запустить внешнюю компоненту на сервере 1С. Для этого: Сделал обработку в конфигурации с галочкой "Сервер". В обработку поместил вызов функции ПодключитьВнешнююКомпоненту(mProgID). В качестве результата получаю "Ложь". Смотрю запросы к регистрам с помощью программы procmon (ProcessMonitor), запросов не вижу. Если переключаю обработку в клиентский режим, то запросы идут. Соответственно вопрос: может ли сервер 1С в принципе вызывать внешние компоненты, если да, то что я могу делать не так? Все это делается в предположении, что 64-битный сервер требует 64-битной компоненты, но, если я правильно понимаю, на данном этапе просто не происходит попытки что-либо получить от регистра. Спасибо. |
|||
1
Maxus43
30.04.14
✎
11:21
|
Сделал обработку в конфигурации с галочкой "Сервер".
что? |
|||
2
H A D G E H O G s
30.04.14
✎
11:24
|
Вариант синтаксиса: По идентификатору
Синтаксис: ПодключитьВнешнююКомпоненту(<ИдентификаторОбъекта>) Параметры: <ИдентификаторОбъекта> (обязательный) Тип: Строка. Идентификатор объекта внешнего компонента в виде ProgID (Programmatic Identifier) реестра MS Windows (например: "AddIn.Scanner"). Должно соответствовать информации, находящейся в регистрационной базе данных системы (Registry). Описание варианта метода: Компонент должен быть выполнен по технологии COM и зарегистрирован в реестре MS Windows. Эти компоненты совместимы с компонентами 1С:Предприятия 7.7. Внимание! Вариант метода не работает на сервере и во внешнем соединении. |
|||
3
H A D G E H O G s
30.04.14
✎
11:24
|
Внимание! Вариант метода не работает на сервере и во внешнем соединении.
|
|||
4
H A D G E H O G s
30.04.14
✎
11:25
|
Вот так вот ребятишки. Я надеюсь - вам стыдно.
|
|||
5
max735
30.04.14
✎
11:37
|
(4) Мне стыдно, но вопрос остался,
можно ли в принципе на стороне сервера загрузить внешнюю компоненту? Каким-либо другим способом? Спасибо. |
|||
6
max735
30.04.14
✎
11:38
|
Еще вопрос,
может ли сам сервер 1С выступать в качестве COM сервера? |
|||
7
ДенисЧ
30.04.14
✎
11:39
|
(6) да
|
|||
8
H A D G E H O G s
30.04.14
✎
11:40
|
(5) Можно.
ПодключитьВнешнююКомпоненту("C:\mydll.dll","MyDll",ТипВнешнейКомпоненты.COM) Ну или разных вариантов метода из макетов, двоичных хранящихся в реквизитах через нав. ссылку |
|||
9
H A D G E H O G s
30.04.14
✎
11:40
|
Не понимаю, что вызывает сложности.
|
|||
10
H A D G E H O G s
30.04.14
✎
11:42
|
(6) Нет.
|
|||
11
H A D G E H O G s
30.04.14
✎
11:42
|
(10) + если я правильно понял смысл вашего вопроса :-)
|
|||
12
Serginio1
30.04.14
✎
11:44
|
(0) Ну и 64 разрядная COM DLL должна быть зарегестрирована в соответствующей ветке реестра.
А какой смысл в ВК на сервере? Если эту задачу решает прекрасно COM |
|||
13
max735
30.04.14
✎
11:49
|
(7) (10) Обрисую стоящую задачу:
есть внешняя компонента (ВК), которая нормально работает с клиентом 1С. Компонента используется для обмена с другой программой. При этом ВК через IDispatch* pBackConnection может управлять клиентом 1С, в частности отдает результат в виде ТаблицыЗначений. Собственно вопрос, предоставляет ли сервер 1С этот интерфейс? Насколько я понял Native API этого делать не может и вообще сильно урезан... |
|||
14
H A D G E H O G s
30.04.14
✎
11:56
|
(13) Да, сервер 1С этот интерфейс предоставляет.
|
|||
15
H A D G E H O G s
30.04.14
✎
11:57
|
(13) А я писал свой сериализатор/десериализатор XDTO на Дельфи для native а потому забил.
|
|||
16
H A D G E H O G s
30.04.14
✎
11:57
|
а потому забил-> а потом забил
|
|||
17
max735
30.04.14
✎
11:59
|
(14) Спасибо, сейчас попробую использовать "ПодключитьВнешнююКомпоненту", посмотрю, что получится.
|
|||
18
Serginio1
30.04.14
✎
11:59
|
В ВК ты можешь получить ссылку на AppDispatch
Но ты можешь передать в в твой КОМ объект ссылку на модуль, Таблицу итд. У тебя ВК 32 разрядная? |
|||
19
max735
30.04.14
✎
12:03
|
(18) Да, 32-разрядная, в принципе я ее пересобрал в 64-разрядном виде, но пока проблемы с подключением. Проект подрос, люди хотят реализовывать обмен на сервере.
|
|||
20
Serginio1
30.04.14
✎
12:26
|
(19) Ну так зарегистрируй ей через соответсющий regsvr32
|
|||
21
max735
30.04.14
✎
12:39
|
(20) Это понятно, но у меня процесс не доходит до загрузки библиотеки, просто не иду обращения к регистрам виндоуз. И насколько я понял из других тем, сервер все-таки не работает с COM компонентами, только со сделанными по Native API. До конца не уверен, но пока просвета не вижу.
|
|||
22
H A D G E H O G s
30.04.14
✎
12:51
|
(21) Вы неправильно поняли.
|
|||
23
Serginio1
30.04.14
✎
12:55
|
(21) Можешь определить метод в котором и передашь в параметре свою таблицу значений, которую и заполнишь
|
|||
24
max735
30.04.14
✎
13:10
|
(22) Возможно есть различие между "голым" COM и внешней компонентой, построенной на COM в отличие от Native. Пока не могу ничего сказать определенного, не в курсе.
|
|||
25
max735
30.04.14
✎
15:53
|
В чем может быть засада?
Вызов функции ПодключитьВнешнююКомпоненту("C:\mydll.dll","MyDll",ТипВнешнейКомпоненты.COM) в регистре все прописывает (и на стороне сервера тоже), но всегда выдает ложь, в том числе и в режиме клиента, когда ПодключитьВнешнююКомпоненту(mProgID) отрабатывает нормально. ? Спасибо. |
|||
26
H A D G E H O G s
30.04.14
✎
15:57
|
(25) Отладчик языка библиотеки - в руки и вперед!
|
|||
27
max735
14.05.14
✎
11:38
|
Вынужден поднять тему.
В целях чистоты эксперимента взял готовый пример внешней компоненты от 1С , тот, которы1 на C++ с использованием ATL. Сейчас уперся в следующий момент: Если подключаю так: ПодключитьВнешнююКомпоненту("AddIn.AddInCom"); то вызов: ВК = Новый("AddIn.AddInExtension"); отрабатывает нормально. Если же использую загрузку: ПодключитьВнешнююКомпоненту("C:\AddInCOM.dll","AddInCOM",ТипВнешнейКомпоненты.COM); то в ответ на: ВК = Новый("AddIn.AddInExtension"); получаю "Тип не определен". В обоих случаях компонента загружается (вижу по логам и по ответу на вызов). Есть надежда, что я что-то делаю не так? Или "все"? |
|||
28
H A D G E H O G s
14.05.14
✎
11:49
|
"""то в ответ на:
ВК = Новый("AddIn.AddInExtension"); получаю "Тип не определен". """ Угу. Ибо надо ВК = Новый("AddIn.AddInCOM.AddInExtension"); |
|||
29
H A D G E H O G s
14.05.14
✎
11:49
|
или
ВК = Новый("AddIn.AddInExtension.AddInCOM"); уж не помню, но в СП написано |
|||
30
max735
14.05.14
✎
12:08
|
Спасибо HADGEHOGs,
отработал вариант: ВК = Новый("AddIn.AddInCOM.AddInExtension"); Если интересно, то по (25) проблема была скорее всего в том, что у меня ВК писалась "с нуля" и в ней не реализован механизм "AddIn". поэтому у меня загрузка производится как: ПодключитьВнешнююКомпоненту("MyVK"); а не: ПодключитьВнешнююКомпоненту("AddIn.MyVK"); Скорее всего по этому "длинный" вызов (с тремя параметрами) не отрабатывает. Сейчас буду проверять самое интересное, как отработает вызов элементов 1С через pBackConnection... |
|||
31
max735
15.05.14
✎
12:19
|
Уважаемый HADGEHOGs,
может быть Вы сможете еще помочь мне прояснить следующую ситуацию: через PBackConection (pConnrection) пытаюсь получить ссылку на AppDispatch. Вызов m_iConnect->GetIDsOfNames(... отрабатывает нормально (возвращает 0). Но далее, при попытке вызова m_iConnect->Invoke(... rphost активно что-то пытается делать, затем вылетает с ошибкой (наверное по таймауту). Точно такой же код, но в 32-битной версии и при выполнении на клиенте отрабатывает без проблем (понятно, что там работет 1cv8.exe а не rphost). Сервис агента 1С грузится под администратором. Соответственно возникли два вопроса: 1. В принципе, rphost должен воспринимать нормально запрос на Invoke или нет? 2. Можно ли каким либо образом расширить логирование rphost, чтобы он туда клал больше информации? Спасибо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |