Форум: "Базы";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c