Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Как расшарить ADOConnection из exe в dll?   Найти похожие ветки 

 
WondeRu ©   (2005-11-08 14:31) [0]

Здарвствуйте!

Подскажите, пожалуйста, каким образом можно использовать в dll ADOConnection, созданный в exe приложении?

Заранее спасибо!


 
ANB ©   (2005-11-08 15:22) [1]

Подключить в DLL нужные модули и передать его адрес.


 
WondeRu ©   (2005-11-08 15:24) [2]

ANB ©   (08.11.05 15:22) [1]
а подробнее?
Если адрес объекта TADOConnection, то это не ко мне :)


 
ANB ©   (2005-11-08 15:29) [3]


> Если адрес объекта TADOConnection, то это не ко мне :)

А к кому ? Пример делать надо - а некогда. Граблей соберешь по любому. Хотя может и подскажет кто с примером.


 
WondeRu ©   (2005-11-08 15:31) [4]

ANB ©   (08.11.05 15:29) [3]
Нельзя передавать внутрь другого модуля ссылку объект, только интерфейс!


 
WondeRu ©   (2005-11-08 15:48) [5]

вот чего-то наваял, жду ваших замечаний:

exe:


procedure DoSelect(AIConnection: _Connection);stdcall;external "project2.dll" name "DoSelect";

procedure TForm1.Button1Click(Sender: TObject);
begin
 DoSelect(ADOConnection1.ConnectionObject);
end;


dll:
 procedure DoSelect(AIConnection: _Connection);
 var
   ADOQuery: TADOQuery;
   ADOConnection: TADOConnection;
 begin
   ADOConnection := TADOConnection.Create(nil);
   ADOQuery := TADOQuery.Create(nil);
   try
     ADOConnection.ConnectionObject := AIConnection;
     ADOQuery.Connection := ADOConnection;
     ADOQuery.SQL.Text := "select * from results";
     ADOQuery.Open;

     if not ADOQuery.Eof then
       begin
         MessageBox(0, PChar(ADOQuery.Fields[0].AsString),"",mb_ok);
       end;

     ADOQuery.Close;
   finally
     ADOQuery.Free;
     ADOConnection.Free;
   end;
 end;


 
ANB ©   (2005-11-08 16:14) [6]


> WondeRu ©   (08.11.05 15:48) [5]

Больше меня знаешь, а просишь совета.

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

Кстати - работает ?

ЗЫ. Для общего развития - а почему нельзя передавать ссылку на объект ? Application вроде народ передает.


 
WondeRu ©   (2005-11-08 16:24) [7]

ANB ©   (08.11.05 16:14) [6]
Application вроде народ передает.

передает, но не просто так... передается лишь хэндл:
Application.Handle
Ссылку на объект нельзя передавать, потому что dll и exe могут быть скомпилированы в разных версиях Delphi (т.е. они возможно будут иметь различное объявление одного и того же класса).
В моем случае dll может быть скомпилирована и на C++ (код правда надо будет чуть подправить ;) ).

Глобальные переменные - это по ситуации (я их почти не использую).

ЗЫ. Работает, но не знаю правильно ли (имеется в виду RefCount у _Connection и еще возможные траблы) :(


 
ANB ©   (2005-11-08 16:33) [8]


> WondeRu ©   (08.11.05 16:24) [7]

Млин, про разные версии ты не писал. Тогда и правда, нельзя.



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

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
1-1133422253
Dioman
2005-12-01 10:30
2005.12.25
Popup menu, отловить закрытие


14-1133271489
baks_uz
2005-11-29 16:38
2005.12.25
Дельфи глазами Хакера


6-1126953581
danilabagroff
2005-09-17 14:39
2005.12.25
the bat!


1-1133250107
PeaK
2005-11-29 10:41
2005.12.25
Какая компонента подходит для ввода Unicode-текста с клавиатуры?


8-1119874845
Amadero
2005-06-27 16:20
2005.12.25
Воспроизведени звука