Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

Уважаемые Мастера. Почему не создается ADOQuery?   Найти похожие ветки 

 
Vovik ©   (2003-07-01 15:43) [0]

Пишу DLL с формой на которой лежат ADOQuery и ADOConnection.
При вызове DLL выдается ошибка "Не был произведен вызов CoInitialize". Если убрать эти два компонента с формы то все ОК.
В чем проблема?


 
stone ©   (2003-07-01 15:49) [1]


> В чем проблема?


> Не был произведен вызов CoInitialize



 
Vovik ©   (2003-07-01 16:05) [2]

а как произвести этот вызов?
я просто кидаю компонент на форму, по идее он сам должен создаться при создании формы.


 
vovik ©   (2003-07-01 16:14) [3]

Из основной формы вызываю
procedure TForm1.Button1Click(Sender: TObject);
var Hbar1: Thandle;
Foo1: procedure;
begin
Hbar1 := LoadLibrary("otchets.dll");
if Hbar1 >= 32 then { Успешно }
begin
Foo1 := GetProcAddress(HBar1, "ShowOtchets");
Foo1;
end
else
MessageDlg("не найден otchets.dll", mtError, [mbOk], 0);
end;

В DLL

procedure ShowOtchets;
Begin
Form1:=TForm1.Create(Form1); /// ОШИБКА !!!!!!
Form1.Show;
End;
exports
ShowOtchets;

Почему именно ADO компоненты вызывают ошибку ? DBE , Apolo, Halcyon - всо нормально


 
Семен Сорокин ©   (2003-07-01 16:15) [4]

http://www.delphimaster.ru/articles/book/Chap09.pdf


 
vovik ©   (2003-07-01 16:28) [5]

Хороший документ, много полезного можно узнать.
Спасибо.
Только ошибка то остается.
Не был произведен вызов CoInitialize
и
Exception EOLESysError

Кстати точно такая же ошибка появляется, если пытаешься динамически создать ADO компонент в потоке. В этом случае мне пришлось в главной форме создавать массив из ADOQuery и в поток передавать индекс, для работы с определенным ADOquery.


 
Семен Сорокин ©   (2003-07-01 16:29) [6]

а почему бы тебе не сделать так:
CoInitialize;
ADOQuery.create(..)


 
stone ©   (2003-07-01 16:45) [7]

В OnCreate главной формы приложения (не библиотеки) первой строкой (чтобы наверняка)

CoInitialize(nil);

PS. Не забудь в uses добавить ActiveX


 
Vovik ©   (2003-07-01 17:03) [8]

ВОТ СПАСИБО !!!!

Вот так работает
В DLL
procedure ShowOtchets;
Begin
CoInitialize(nil);
Form1:=TForm1.Create(Form1); /// И нету ошибки :-))
Form1.Show;
End;
exports
ShowOtchets;



 
sniknik ©   (2003-07-01 19:45) [9]

CoUnInitialize() в конце не забывай вызывать (вызовы должны быть строго парные)



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

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

Наверх




Память: 0.48 MB
Время: 0.026 c
1-77898
LKJJ
2003-07-14 11:37
2003.07.24
Что за фигня со StringGrid?


1-77924
Starkom
2003-07-10 09:19
2003.07.24
Хочу сделать хоткеи в Dll ке


1-77866
Chadnov
2003-07-13 17:09
2003.07.24
[MDI]Как из дочернего окна узнать общее количество дочерних окон?


1-77963
Micke
2003-07-11 08:30
2003.07.24
Запуск нескольких копий приложения средствами Delphi


1-77832
Shadow X
2003-07-09 09:38
2003.07.24
ShellTreeView