Форум: "Основная";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
ВнизADO компоненты в dll - инициализация Найти похожие ветки
← →
Аццкий юзар (2006-06-24 02:27) [0]А как бы обойтись без формы и правильно проинициализировать адошки?
ADOxxx := TADOxxx.Create (nil) будет работать?
← →
Palladin © (2006-06-24 09:13) [1]самому то проверить сложно?
← →
Savek (2006-06-24 10:51) [2]Будет, не забудь потом убить его!
← →
isasa © (2006-06-24 10:58) [3]Savek (24.06.06 10:51) [2]
... не забудь потом убить его!
И не только убить, но и заключить в пару вызовов
CoInitializeEx(...);
....
CoUninitialize;
← →
Аццкий юзар (2006-06-25 03:49) [4]Работает. Замечательно работает. Но почему-то не хочет автоматом инициализироваться при подключении dll (DLL_Process_Attach) - виснет.
А как лучше убить - через Free или Destroy? :(
← →
Аццкий юзар (2006-06-25 05:20) [5]Вот мать их. Какой-то конфликт возникает с WebBrowser - ом. Хендл WebBrowser = 0 и вылет с ошибкой. И почему-то на CoUninitialize зависает зараза.
← →
Аццкий юзар (2006-06-25 06:21) [6]У, мать их всех за ногу!
Частично нашёл решение проблемы, и без всяких CoInitializeEx
http://delphiworld.narod.ru/base/ado_dll.html
Только вот напрягает мессага
[Warning] MySQL_Driver.dpr(15): Unit "oleauto" is deprecated
← →
Аццкий юзар (2006-06-25 06:48) [7]А вот ещё вопрос (прошу прощения за назойливость) - как лучше сделать.
1) Целиком в dll обрабатывать запросы и возвращать результат либо успех оперfции для Execut, например.
2) В dll вынести только процедуры для ADO компонент (open, close, Execut и т.д.), а всю обработку вести в exe.
← →
Palladin © (2006-06-25 08:53) [8]
> Аццкий юзар (25.06.06 06:48) [7]
в первом случае будет меньше вызовов, соответственно код (хоста) упростится, во втором случае возможна более гибкая работа с БД... вывод: сделай и то и то и в зависимости от ситуации пользуйся либо тем либо тем
← →
sniknik © (2006-06-25 09:25) [9]> Только вот напрягает мессага
> [Warning] MySQL_Driver.dpr(15): Unit "oleauto" is deprecated
по моему это означает, что использование повторно (гдето другой включенный модуль его тоже использует) и он подавлен (выброшен компилятором).
← →
isasa © (2006-06-25 12:14) [10]Аццкий юзар (25.06.06 06:21) [6]
Тогда уже
{$Delphi}\Source\Rtl\Common\ ComObj.pas
т.е.
uses ComObj;
см. его секции
initialization и finalization
и неплохо бы извратится и присвоить, где-то, до того
CoInitFlags := COINIT_MULTITHREADED;
А что с
DLL_Process_Attach - ??
← →
Антибайт (2006-06-25 16:45) [11]
> А что сDLL_Process_Attach - ??
ADO шки не хотят инициализироваться. Виснет не Create. Пришлось отдельной процедурой делать.
> и неплохо бы извратится и присвоить, где-то, до того CoInitFlags
> := COINIT_MULTITHREADED;
Это как?
← →
isasa © (2006-06-25 18:05) [12]:)
Пока не видно кода DllMain(EnterProc или как там ее).
Гадать можно только на кофейной гуще. Телепатор у меня от жары отказал.
← →
Антибайт (2006-06-25 23:57) [13]Да ничего сложного там нет
{
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 не вызывается, неявно по ходу дела тоже. Об том и речь?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c