Вниз
Скачать: CL | DM;

ADO & DLL   Найти похожие ветки 

 
Miau   (2003-08-23 14:42) [0]

Мастера, может ли кто-нибудь объяснить как обойти такое: не могу вызвать из DLL функцию, использующую ADOConnection и ADOQuery ?

Из dll вызывается функция, которая создаёт форму, на которой лежат ado-компоненты. На момент создания формы получается ошибка.

Если убрать ado-компоненты, то ошибки нет.

Или если компоненты оставить, а форму создать из обычного модуля (не dll), то тоже ошибки нет.

Я пришел к выводу, что ADO и dll не могут сосуществовать :(
Как это обойти ?


 
Opuhshii ©   (2003-08-23 18:23) [1]

хм,.. а к чему форма?,..
ну да бог с ней, ))
"Я пришел к выводу, что ADO и dll не могут сосуществовать :("
ошибочно,..
" получается ошибка"
а какая?,.. TTelepat не реализован ещё,..
скорее всего по причине отсутсвия инициализации апартмента в потоке вызывающего msado,..

пишем, в нашей библиотеке что-то похожее на...
procedure CreateMyForm;
begin
with TForm1.Create(nil) do begin
ShowModal;
Free;
end;
end;


соответственно,. где-то внутри формы открываем/закрываем подключение/рекордсет,..

procedure TMyAppForm.Button1Click(Sender: TObject);
var
MyLib:THandle;
MyProc:TProcedure;
begin
MyLib:=LoadLibrary(МояБиблиотека_ИмяЕё);
try
MyProc:=GetProcAddress(MyLib,"CreateMyForm");
if not Assigned(MyProc) then
raise Exception.Create("Can""t find CreateMyForm");
MyProc;
finally
FreeLibrary(MyLib);
end;
end;


читаем Platform SDK относительно CoInitialize,...
пример..

procedure TMyAppForm.FormCreate(Sender: TObject);
begin
CoInitialize(nil);
end;

procedure TMyAppForm.FormDestroy(Sender: TObject);
begin
CoUninitialize;
end;

Запускаем,.
начинаем читать внимательно/приобретаем книжки о COM/MSDN,..
хотя бы статьи,.


 
DrPass ©   (2003-08-24 12:52) [2]

А еще один нюансик, о котором история умалчивает:
uses ShareMem в dll и exe нужно писать не только, когда параметрами передаются ansi-строки, но и когда dll работает с классами VCL (просто потому, что эти строки там тоже активно используются).
На всякий случай напомню, модуль Sharemem должен быть на первом месте в разделе uses


 
АлексейК   (2003-08-25 05:07) [3]

пишем, в нашей библиотеке что-то похожее на...
procedure CreateMyForm;
begin
with TForm1.Create(nil) do begin
ShowModal;
Free;
end;
end;

Интересно а почему owner=nil, а не Application, и где передача Handle приложения?


 
Miau   (2003-08-25 16:03) [4]

Спасибо!
Оно заработало !!


 
Opuhshii ©   (2003-08-25 18:49) [5]

2АлексейК (25.08.03 05:07) [3]
?

да, стоит написать например так,
with TForm1.Create(nil) do
try
ShowModal;
finally
Free;
end;

а Owner?.., по желанию.. ))

>передача Handle приложения
кто?



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
7-48810
Dimok
2003-06-29 01:05
2003.09.15
Работа с тюнером


3-48438
Andrey V.
2003-08-25 10:13
2003.09.15
Feth ALL


1-48615
глупый
2003-09-03 13:28
2003.09.15
В мемо заносить построчно инфу ?


6-48676
MegaVolt
2003-04-25 15:53
2003.09.15
Как найти зашаренные ресурсы с $ например Temp$ ?


14-48706
Aga
2003-08-28 13:03
2003.09.15
RxRichEdit




   Наверх