Главная страница
    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.013 c
4-48841
alexus
2003-07-15 11:16
2003.09.15
Операции с треем


1-48585
RyDmi
2003-09-04 01:10
2003.09.15
Как поместить проект в SysTray?


14-48741
Steven
2003-08-27 17:54
2003.09.15
ModelMaker


1-48530
XDefender
2003-09-02 10:31
2003.09.15
Какой компонент позволяед редактировать HTML текст визуально?


14-48768
Palladin
2003-08-25 16:26
2003.09.15
Однако :))





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