Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.15;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.025 c
1-48552
hawkins
2003-09-01 22:07
2003.09.15
Как скопировать изображение из TDBImage в TImage?


3-48446
DelphiM
2003-08-25 10:27
2003.09.15
Grid


3-48430
Lenchik_Z
2003-08-25 12:21
2003.09.15
ADOConnection


1-48518
G
2003-09-02 15:22
2003.09.15
Масштаб Формы и его Cotrolov


3-48479
dot
2003-08-22 13:11
2003.09.15
Доступ к таблице