Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];

Вниз

Возможна ли передача коннекта в COM объект?   Найти похожие ветки 

 
Tyo   (2002-11-29 21:04) [0]

Помогите советом, плз.
Я написал COM-объект, в котором имеется форма, а на ней -- запрос ADOQuery. При вызове COM-объекта в нем устанавливается коннект для этого запроса, и дальше все работает нормально.
Однако в программе, вызывающей этот COM, уже существует установленный коннект ADOConnection, и очень хотелось бы его передать в COM в качестве параметра Connection для тамошнего запроса ADOQuery, чтобы не тратить время и не устанавливать два параллельных коннекта.
Ничего похожего в типах параметров для интерфесов COM я не нашел.
Итак -- можно ли сделать вышеуказанное, и если да, то как?
Заранее спасибо.


 
asmith   (2002-11-29 21:34) [1]

Можно. Пусть, например, ты добавил к интерфейсу метод инициализации коннекции:
function InitConnectionInCOM(AppConnection: Integer): HResult; stdcall;
Далее создаешь ссылку на объект и инициализируешь коннекцию:
myCOM := CreateComObject(...);
myCOM.InitConnectionInCOM(dmApp.conApp));
т.е. передаешь в свой объект ссылку на существующую и уже открытую главной апликацией коннекцию (TADOConnection)
В COM-объекте создаешь экземпляр внутреннего объекта и присваиваешь ему ссылку на коннекцию:
function TMyCOM.InitConnectionInCOM(AppConnection: Integer): HResult;
begin
conCOM := TAdoConnection(SomeParent);
conCOM := TAdoConnection(AppConnection);
end;
где SomeParent может быть ссылкой на форму или еще чего-нибудь или вообще nil (тогда прибить обязательно руками!).
Теперь цепляй на conCOM свои ADOQuery и что тебе нужно.



 
Набережных С.   (2002-11-29 23:39) [2]

Создаешь в COM-объекте связку ADOConnection+ADOQuery. Передаешь в него интерфейс _Connection(свойство ConnectionObject зкземпляра ADOConnection в EXE). Присваиваешь этот интерфейс свойству ConnectionObject зкземпляра ADOConnection в COM-объекте. Работай на здоровье. А указатели на объект передавать не следует, даже если объект в DLL.


 
asmith   (2002-11-30 17:43) [3]

>А указатели на объект передавать не следует
А чем это грозит? Делаю такие вещи достаточно давно, еще со времен D2, побочных эффектов не наблюдал. Правда, не допускаю какой-либо модификации переданного объекта. А в журнальных статьях видел кучу примеров передачи с модификацией. Например, апликация передает в DLL TMainMenu и там оно модифицируется.


 
Набережных С.   (2002-11-30 19:07) [4]

Ну использовали - и славненько. Проблемы, как помнится, были связаны с межапартаментным взаимодействием и не только. Подробностей я уже не помню и не имею никакого желания вспоминать. Так что можно считать, что аргументов у меня нет.
P.S. А какое отношение к этому имеет TMainMenu я вообще не понял.


 
asmith   (2002-11-30 19:19) [5]

Это просто для точности - не далее, как вчера видел этот пример в статье. Меня это удивило - всегда полагал, что передавать созданный в апликации объект в DLL и там модифицировать - не рекомендуется. Особенно, если не собирается все с runtime packages.


 
Fantasist   (2002-11-30 21:16) [6]


> Меня это удивило - всегда полагал, что передавать созданный
> в апликации объект в DLL и там модифицировать - не рекомендуется


Почему не реккомендуется? Конечно, если ты плохо представляешь иерархию объектов и их взаимодействие то можно напороться на глюки, однако если же ты хорошо представляешь то что модифицируешь, то проблем не вижу. Не важно какой код изменит объект, важно как это отразиться на связанных объектах.

С COM я бы тоже предпочел передавать интерфейсы вместо указателей на объекты. Самое главное чтобы с подсчетом ссылок все было ок, но Дельфийский компилятор с этим не плохо справляется.


 
Набережных С.   (2002-11-30 21:42) [7]

Да просто я энное время назад наступал на эти грабли в некоторых ситуациях и пришел к выводу, что лучше этого избегать, чем тратить время на борьбу с побочными эффектами. А подробностей я ,честно слово, не помню:). И вполне допускаю, что в других случаях все будет нормально. Но сам я так не делаю, а потому и другим рекомендовать не могу. А в меню, если я правильно помню, все замыкается на посылку сообщений на его хендл, так что его можно менять хоть откуда(вероятно:)).



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
1-36227
debugger
2002-11-29 13:45
2002.12.12
Убрать границу у tabcontrol


1-36253
MaXie
2002-11-28 12:40
2002.12.12
Темная лошадка Delphi5 - Закладка Servers!


14-36380
Карелин Артем
2002-11-21 15:41
2002.12.12
Смерть???


14-36404
KME
2002-11-21 21:36
2002.12.12
География


1-36276
kex86
2002-12-02 14:14
2002.12.12
keydown





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский