|
Работа с данными 1С из внешней компоненты Native API | ☑ | ||
|---|---|---|---|---|
|
0
Diabolicum 1C
21.10.10
✎
10:58
|
Вопрос собственно в том, как осуществляется данное взаимодействие? Проштудировал и руководство по разработке ВК, и пример с ИТС. В общем разобрался и с классами и методами. Но нигде не сказано, как из внешней компоненты работать с 1С как с OLE automation server'ом.
В мануале указано только, что ссылка типа void*, передаваемая в метод Init ВК, является, по сути, ссылкой IDispatch* и у нее есть свойство IDispatch* AppDispatch, являющееся ссылкой на COM интерфейс 1C:Предприятия. Однако уже на этапе получения данного свойства возникает либо ошибка стека (т.е. несоответствие соглашений о вызовах между описанием и реализацией по ссылке), либо просто падение 1С. Код выглядит примерно так: 1. В объявлении описания класса добавлено новое свойство: class .... { ... private: ... IDispatch* m_iOLEInterface; }
2. В метод Init добавлена строка: init(void* Connection) {...
3. Во все перечисления добавлено соответствующее описание процедуры 4. В процедуре CallAsProc добавлен код CallAsProc(...)
Проект нормально компилируется. DLL подключается, однако при попытке вызова добавленного метода возникает runtime ошибка. Методом научного тыка выяснил, что ошибку вызывает строка: hr = m_iOLEInterface->GetIDsOfNames(IID_NULL, &sProp, 1, 0, &dispid).
Подскажите, пожалуйста, в чем ошибка. |
|||
|
1
Diabolicum 1C
21.10.10
✎
14:24
|
ап
|
|||
|
2
supremum
21.10.10
✎
14:27
|
(0) Смысл?
|
|||
|
3
Diabolicum 1C
21.10.10
✎
15:05
|
(2) Требование заказчика :(. NativeAPI - потому что нужно подключать и на сервере (nix'ы). Библиотека должна расширять некоторые сервисные возможности платформы. Необходимо читать метаданные конфигурации.
----------------------------------------------------- П.С. По сути помочь можешь? |
|||
|
4
supremum
21.10.10
✎
15:44
|
(3) По сути мы должны получается либо передавать метаданные в вызываемый метод ВК (что думаю правильнее), либо подключаться в ВК к 1С через COM-соединения (ИМХО)
|
|||
|
5
DmitrO
21.10.10
✎
16:05
|
[В мануале указано только, что ссылка типа void*, передаваемая в метод Init ВК, является, по сути, ссылкой IDispatch*]
Если мы говорим о компонентах NativeAPI, то это не правда - нет такого в документации. В Init передается указатель на IAddInDefBase. Из компонент NativeAPI невозможно работать с данными 1С. |
|||
|
6
DmitrO
21.10.10
✎
16:09
|
(4) Передавать метаданные будет весьма трудно, т.к. передать можно только простые типы, а подключаться COM-соединением на *nix серверах не получится.
|
|||
|
7
Diabolicum 1C
21.10.10
✎
16:11
|
(5) Правда ваша. Пересмотрел мануал.
(6) И какой выход? |
|||
|
8
Diabolicum 1C
21.10.10
✎
16:13
|
(6) В чем тогда смысл Native? Компоненты типа склонения писать?
|
|||
|
9
supremum
21.10.10
✎
16:41
|
(7) Web-сервисы как вариант заюзать
|
|||
|
10
supremum
21.10.10
✎
16:43
|
+(9) Тогда можно будет и от внешней компоненты отказаться и нормально передавать структуры и данные.
|
|||
|
11
DmitrO
21.10.10
✎
18:20
|
(7) Выход1: а ну его в задницу этот *nix и NativeAPI;
Выход2: выносить мозг сериализацией, например xml; Обычно тем кто задачу знает полностью и выход всегда найти легче. (8) Хороший вопрос, черт побери, тока не по адресу.. сам понимаешь. :) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |