Работа с данными 1С из внешней компоненты Native API #512150


#0 by Diabolicum 1C
Вопрос собственно в том, как осуществляется данное взаимодействие? Проштудировал и руководство по разработке ВК, и пример с ИТС. В общем разобрался и с классами и методами. Но нигде не сказано, как из внешней компоненты работать с 1С как с OLE automation server'ом. В мануале указано только, что ссылка типа void*, передаваемая в метод Init ВК, является, по сути, ссылкой  IDispatch* и у нее есть свойство IDispatch* AppDispatch, являющееся ссылкой на COM интерфейс 1C:Предприятия. Однако уже на этапе получения данного свойства возникает либо ошибка стека (т.е. несоответствие соглашений о вызовах между описанием и реализацией по ссылке), либо просто падение 1С. Код выглядит примерно так: 1. В объявлении описания класса добавлено новое свойство: [1С]class .... { ... private: ... IDispatch* m_iOLEInterface; }[/1C] 2. В метод Init добавлена строка: [1С]init(void* Connection) {... m_iOLEInterface = (IDispatch*)Connection;}[/1C] 3. Во все перечисления добавлено соответствующее описание процедуры 4. В процедуре CallAsProc добавлен код [1С]CallAsProc(...) {   ....   switch(...) {  ....   case eMetaName:       {       DISPID sProp;       HRESULT hr;       LPOLESTR sProp =  L"AppDispatch";       hr = m_iOLEInterface->GetIDsOfNames(IID_NULL, &sProp, 1, 0, &dispid);       }         } }[/1C] Проект нормально компилируется. DLL подключается, однако при попытке вызова добавленного метода возникает runtime ошибка. Методом научного тыка выяснил, что ошибку вызывает строка: [1С]hr = m_iOLEInterface->GetIDsOfNames(IID_NULL, &sProp, 1, 0, &dispid).[/1C] Подскажите, пожалуйста, в чем ошибка.
#1 by Diabolicum 1C
ап
#2 by supremum
Смысл?
#3 by Diabolicum 1C
Требование заказчика :(. NativeAPI - потому что нужно подключать и на сервере (nix'ы). Библиотека должна расширять некоторые сервисные возможности платформы. Необходимо читать метаданные конфигурации. ----------------------------------------------------- П.С. По сути помочь можешь?
#4 by supremum
По сути мы должны получается либо передавать метаданные в вызываемый метод ВК (что думаю правильнее), либо подключаться в ВК к 1С через COM-соединения (ИМХО)
#5 by DmitrO
[В мануале указано только, что ссылка типа void*, передаваемая в метод Init ВК, является, по сути, ссылкой  IDispatch*] Если мы говорим о компонентах NativeAPI, то это не правда - нет такого в документации. В Init передается указатель на IAddInDefBase. Из компонент NativeAPI невозможно работать с данными 1С.
#6 by DmitrO
Передавать метаданные будет весьма трудно, т.к. передать можно только простые типы, а подключаться COM-соединением на *nix серверах не получится.
#7 by Diabolicum 1C
Правда ваша. Пересмотрел мануал. И какой выход?
#8 by Diabolicum 1C
В чем тогда смысл Native? Компоненты типа склонения писать?
#9 by supremum
Web-сервисы как вариант заюзать
#10 by supremum
+ Тогда можно будет и от внешней компоненты отказаться и нормально передавать структуры и данные.
#11 by DmitrO
Выход1: а ну его в задницу этот *nix и NativeAPI; Выход2: выносить мозг сериализацией, например xml; Обычно тем кто задачу знает полностью и выход всегда найти легче. Хороший вопрос, черт побери, тока не по адресу.. сам понимаешь. :)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С