Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.012 c
14-48692
Grouzd[E]v
2003-08-24 18:38
2003.09.15
Будете смеятся: как работать с архивами??? - я еще новичок :(((


9-48383
Mihey
2003-03-14 18:11
2003.09.15
DelphiX и Alpha - я плакалъ.


4-48831
sdram
2003-07-11 11:31
2003.09.15
Подскажите как узнать имя пользователя?


14-48733
Delphi5.01
2003-08-26 19:49
2003.09.15
Linux


8-48653
Sender
2003-05-16 12:07
2003.09.15
MIDI





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский