delphi activeX + 1C (не NativeAPI) #667601


#0 by qeos
ктото имеет опыт разработки компонент не используя 1CNativeLib и подобные вещи? т.е. интересует глобальный вопрос: как получить pConnection в компоненте?
#1 by ZanderZ
а в чем проблема ?
#2 by Diversus
Я как то делал. Но давно было. Посмотри, там с исходниками.
#3 by qeos
если создаю все через wizard то у меня нет объекта 1с, например для создания массива или запроса..
#4 by ZanderZ
в init инициализируй переменную класса и передав в нее pConnection
#5 by qeos
так все работает но мне надо к примеру вернуть массив.. как? ) вот как? можно подробней? )
#6 by ZanderZ
эээ как обычно
#7 by qeos
а может просто примером покажешь?
#8 by qeos
если я правильно понимаю, то надо изменить процедуру под мои нужды:  procedure Initialize(const pConnection: IDispatch); override; но так он ругается что описани отличается от предыдущего. если же я указываю reintrodused, то у меня в эту процедуру не заходит вообще.
#9 by ZanderZ
я не понял ты каким образом хочешь с 1с связать то ?
#10 by Кирпич
сначала учить матчасть в , потом смотреть доку 1С, потом смотреть сюда
#11 by qeos
в примерах 1с nativeAPI есть инициализация  bool CAddInNative::Init(void* pConnection) в переделаном под delphi тоже есть такая соответственно это IDispatch на 1с.. с помощью pConnection можно создавать объекты 1с. вот как это переложить на нормальный язык, я чтото никак не вкурю. по теории 1С при создании (подкгрузке) компонента вызывает процедуры инициализации. вот их-то, как я понимаю, я и должен изменить. т.к. в документации написано так: [code]Инициализация и выгрузка компоненты Для инициализации и выгрузки компоненты используется интерфейс IInitDone. Этот интерфейс наследован от IUnknown и предназначен для инициализации объекта и завершения работы с объектом. Init Синтаксис: Параметры: <pBackConnection> Тип: IDispatch. Указатель на интерфейс 1С:Предприятия. Возвращаемое значение: E_FAIL - при инициализации произошла ошибка S_OK - инициализация прошла успешно Описание: При загрузке 1С:Предприятие инициализирует объект компоненты, вызывая метод Init и передавая указатель на IDispatch. Объект может сохранить этот указатель для дальнейшего использования. Все остальные интерфейсы 1С:Предприятия объект может получить, вызвав метод QueryInterface переданного ему интерфейса IDispatch. Объект должен возвратить S_OK, если инициализация прошла успешно, и E_FAIL при возникновении ошибки. Данный метод может использовать интерфейс IErrorLog для вывода информации об ошибках. При этом инициализация считается неудачной, если одна из переданных структур EXCEPINFO имеет поле scode, не равное S_OK. Все переданные в IErrorLog данные обрабатываются при возврате из данного метода. В момент вызова этого метода свойство AppDispatch не определено.[/code]
#12 by Кирпич
можно действовать в обратном порядке, но тогда будет на годы дольше.
#13 by qeos
я ж говорю: не используя nativeAPI
#14 by Кирпич
ну тебе про nativeAPI никто и не писал.
#15 by qeos
при визарде никаких процедур Init нету, есть Initialize, но она описана в базовом классе и не имеет параметров.
#16 by Кирпич
шо ищо за визард? если это та древняя фигня, то у TFPList есть pConnection. уже готовый
#17 by Serginio1
Посмотри Исходник ВК которая загружает Объект Автоматизации поддерживающий ITypeInfo и выполняет все его свойства и методы через IlanguageExtender. Использую 10 лет
#18 by qeos
вот эти визарды или как их там..
#19 by Кирпич
#20 by Кирпич
у блин. попутал
#21 by Кирпич
короче или, если горит, запешитесь на прием к программисту
#22 by qeos
готов записаться. к кому?
#23 by Кирпич
ну ко мне запишись
#24 by qeos
gtalk есть? skype? icq?...etc
#25 by Кирпич
есть электронная почка
#26 by Кирпич
)))) пардон. почта
#27 by Кирпич
пиши чего надо qxlreport кошка mail RU
#28 by qeos
смысла нет почтой общаться. вобщем нужно победить BackConnection для XE4 не используя жесткие костыли. т.е. элегантно получить backConnection называй свою цену.
#29 by ЧеловекДуши
Жесть :)
#30 by Кирпич
ну нет смысла так нет
#31 by qeos
просто тут проще. если будет оплата, тогда почтой ;)
#32 by Кирпич
что такое "победить BackConnection для XE4" я не понял. да и к тому же XE4 у меня нет.
#33 by Кирпич
лучше бы на mail написал.и сам заодно понял бы, чего хочешь.
#34 by qeos
[spoiler]как тут под спойлер поместить?[/spoiler] [спойлер]или так?[/спойлер]
#35 by qeos
jr
#36 by Serginio1
Вообще восьмерка поддерживает события, так же можно передать ссылку на модуль в которой реализовать метод с определенной сигнатурой
#37 by Serginio1
То есть создай в свем ком объекте событие например DocumentChange и подпишись из 1С. Не забывай вызывать в потоке 1С. 1С совский эвент ассинхронный.
#38 by Кирпич
Что jr?
#39 by qeos
jr = ок отправил письмо
#40 by qeos
события работают.. как в компоненте создать объект 1с?
#41 by Serginio1
Если тебе нужен контекст то, можешь из него передавать, что хочешь. Второй способ это V83.COMConnector . Ну если посмотришь мою компоненту тебе нужно только создать метод procedure TAddinTypeInfo.InitFrom1C(const pCon: IDispatch); begin     If Not Assigned(pConn) Then end Например для семерки это Который вызовется при подключении.
#42 by Serginio1
41 Вернее ты можешь создать компоненту которая вернет в 1с pCon, а её уже передавать в любой COM объект
#43 by Serginio1
И тогда тебе вообще не нужно заморачиваться с ВК.
#44 by qeos
вообще ничего не понял.. надо пообедать сходить мож мозг остынет..
#45 by qeos
где твоя компонента?
#46 by qeos
а..
#47 by Serginio1
Я тебе в 17 ссылку на неё давал
#48 by qeos
дада... но это все не то.. чтото здесь я упускаю.. у меня все работает прекрасно кроме того что нету этого BackConnection..
#49 by Serginio1
Как это нет. PEvent := nil;     IDispatch(pCon).QueryInterface(IAsyncEvent,PEvent); Это что? Эта компонента тебе дает возможность просто писать ком объект. От тебя требуется только реализовать метод procedure TAddinTypeInfo.InitFrom1C(const pCon: IDispatch); А вот из этого pCon получай что тебе нужно.    procedure GetEventBufferDepth(var plDepth: Integer); safecall;
#50 by Serginio1
Из него же получай свой BackConnection obj:=OleVariant(Pconn).AppDispatch; IDispatch(obj)._AddRef;
#51 by qeos
ты на аське есть?
#52 by Serginio1
нет
#53 by qeos
жаль.. тогда пару вопросов. для получения backConnection, как минимум, достаточно реализовать только IInitDone?
#54 by qeos
взял твой пример из папки AddinTypeInfo в 1С я должен создать объект окошко из ProbaWind открывается. как мне вызвать InitFrom1C? что в параметрах писать?
#55 by qeos
я уже близко к разгадке )) только не пропадай сейчас -_-
#56 by Serginio1
Ты не весь пример показал. Это ты создаешь компоненту. Затем из компоненты ты должен загрузить свой ком объект А внутри Ком объекта ты должен реализовать то что написал в 41. Посмотри примеры
#57 by Serginio1
Для понимания 41 вот объявление класса. TAddinTypeInfo = class(TAutoObject, IAddinTypeInfo) У меня очень много работы. Так, что появляться буду не часто.
#58 by Кирпич
смотри почту. там простой пример. вроде работает
#59 by qeos
оказывается правильный вариант был такой: а вот теперь вопрос еще сложнее.. а если у меня компонента должна встраиваться в форме, то ПодключитьВнешнююКомпоненту я все равно эе должен делать гдето в коде?
#60 by qeos
*же
#61 by Serginio1
Если тебе нужны создавать окна, то тебе нужны родительские окна IDispatch(pCon).QueryInterface(IExtWndsSupport,pExtWndsSupport); Для контейнеров нужно реализовывать другие интерфейсы и они с ВК никак не связаны.
#62 by Serginio1
56 это выглядит так Загружаем ВК Затем загружаем КОМ объект в котором реализован метод procedure TAddinTypeInfo.InitFrom1C(const pCon: IDispatch);      TypeInfo.LoadOleObject("AddinTypeInfo.AddinTypeInfo");
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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