Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADO компоненты в dll - инициализация [D7, Win2k, WinXP]


Аццкий юзар ©   (2006-06-24 02:27:00) 

А как бы обойтись без формы и правильно проинициализировать адошки?
ADOxxx := TADOxxx.Create (nil) будет работать?


Антибайт   (2006-06-25 23:57:00) [1]

Да ничего сложного там нет


{
procedure DllEntryPoint (Reason : DWord);
begin
case Reason of

 DLL_Process_Attach  : begin
                        CoInitializeEx (nil, COINIT_MULTITHREADED);
                       end;

 Dll_Process_Detach  : begin
                        CoUninitialize;
                       end;                
end;
end;
      }

function Init : boolean; stdcall;
begin
result := true;

try
 ADOConnect := TADOConnection.Create (nil);
 ADOCmd := TADOCommand.Create (ADOConnect);
 ADODS := TADODataSet.Create(ADOConnect);
except
 result := false;
 exit;
end;

ADOCmd.Connection := ADOConnect;
ADODS.Connection := ADOConnect;
end;


....
initialization
 begin
  //DllProc := @DllEntryPoint;
  //DllEntryPoint (DLL_PROCESS_ATTACH);
 end;
 
finalization


хотя разницы на мой взгляд нет, можно было сразу сюда писать.

в uses добавил OleAuto.
DllEntryPoint закометтил ввиду ненужности.
ComObj посмотрел - явно CoInitializeEx  не вызывается, неявно по ходу дела тоже. Об том и речь?


isasa   (2006-06-25 18:05:00) [2]

:)
Пока не видно кода DllMain(EnterProc или как там ее).
Гадать можно только на кофейной гуще. Телепатор у меня от жары отказал.


Антибайт   (2006-06-25 16:45:00) [3]


> А что сDLL_Process_Attach - ??

ADO шки не хотят инициализироваться. Виснет не Create. Пришлось отдельной процедурой делать.


> и неплохо бы извратится и присвоить, где-то, до того CoInitFlags
> := COINIT_MULTITHREADED;

Это как?


isasa   (2006-06-25 12:14:00) [4]

Аццкий юзар   (25.06.06 06:21) [6]

Тогда уже
{$Delphi}\Source\Rtl\Common\ ComObj.pas
т.е.

uses ComObj;

см. его секции
initialization и finalization

и неплохо бы извратится и присвоить, где-то, до того

CoInitFlags := COINIT_MULTITHREADED;

А что с
DLL_Process_Attach - ??


sniknik   (2006-06-25 09:25:00) [5]

> Только вот напрягает мессага
> [Warning] MySQL_Driver.dpr(15): Unit 'oleauto' is deprecated
по моему это означает, что использование повторно (гдето другой включенный модуль его тоже использует) и он подавлен (выброшен компилятором).


Palladin   (2006-06-25 08:53:00) [6]


> Аццкий юзар   (25.06.06 06:48) [7]

в первом случае будет меньше вызовов, соответственно код (хоста) упростится, во втором случае возможна более гибкая работа с БД... вывод: сделай и то и то и в зависимости от ситуации пользуйся либо тем либо тем


Аццкий юзар   (2006-06-25 06:48:00) [7]

А вот ещё вопрос (прошу прощения за назойливость) - как лучше сделать.
1) Целиком в dll обрабатывать запросы и возвращать результат либо успех оперfции для Execut, например.
2) В dll вынести только процедуры для ADO компонент (open, close, Execut и т.д.), а всю обработку вести в exe.


Аццкий юзар   (2006-06-25 06:21:00) [8]

У, мать их всех за ногу!
Частично нашёл решение проблемы, и без всяких CoInitializeEx

http://delphiworld.narod.ru/base/ado_dll.html

Только вот напрягает мессага

[Warning] MySQL_Driver.dpr(15): Unit 'oleauto' is deprecated


Аццкий юзар   (2006-06-25 05:20:00) [9]

Вот мать их. Какой-то конфликт возникает с WebBrowser - ом. Хендл WebBrowser = 0 и вылет с ошибкой. И почему-то на CoUninitialize зависает зараза.


Аццкий юзар   (2006-06-25 03:49:00) [10]

Работает. Замечательно работает. Но почему-то не хочет автоматом инициализироваться при подключении dll (DLL_Process_Attach) - виснет.
А как лучше убить - через Free или Destroy? :(


isasa   (2006-06-24 10:58:00) [11]

Savek   (24.06.06 10:51) [2]
... не забудь потом убить его!


И не только убить, но и заключить в пару вызовов
CoInitializeEx(...);

....
CoUninitialize;


Savek   (2006-06-24 10:51:00) [12]

Будет, не забудь потом убить его!


Palladin   (2006-06-24 09:13:00) [13]

самому то проверить сложно?


Наверх

Титульная страница Поиск, карта сайта Написать письмо