![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]самому то проверить сложно?