![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
'Не был произведен вызов CoInitialize' [D6, MSSQL]
AlexTP © (2004-08-04 14:20:00)Помогите решить проблему: на форме лежит ADOConnection, при создании формы в кострукторе ADOCommand после вызова CreateADOObject(CLASS_Command) as _Command; вылетает Exception:
'Не был произведен вызов CoInitialize'. Почему ?
alexTP (2004-08-04 17:34:00) [1]
> Anatoly Podgoretsky © (04.08.04 17:09) [12]
> так как MainForm глобальная переменная, то таких мест может
> быть много.
Воистину глобальная. Всем спасибо.
KosilkA (2004-08-04 17:14:00) [2]
> alexTP (04.08.04 16:29) [5]
> У меня действительно dll.
>
> Поставил CoInitialize(nil) ADOConnection успокоился.
>
> procedure Ini;
> begin
> CoInitialize(nil);
> MainForm:= TMainForm.Create(nil);
> end;
>
> Теперь Access violention на MainForm.Free;
>
> procedure Deini;
> begin
> MainForm.Free;
> CoUninitialize;
> end;
попробуй назначать имя новой форме и в вызове функции Deini прописать это имя
Anatoly Podgoretsky (2004-08-04 17:09:00) [3]alexTP (04.08.04 16:29) [5]
Теперь ошибка в другом месте не связаная с Coinitialize, так как MainForm глобальная переменная, то таких мест может быть много.
KosilkA (2004-08-04 17:02:00) [4]дай свой код .. штоли ..=)))
alexTP (2004-08-04 16:54:00) [5]
> KosilkA © (04.08.04 16:46) [8]
Попробовал:
external exception C000001D там же MainForm.Free
alexTP (2004-08-04 16:49:00) [6]Нормально, я уже догадался. Теперь проблема: не работает MainForm.Free; :((
KosilkA (2004-08-04 16:46:00) [7]а может проще дописать в конец юнита главной формы
initialization
Coinitialize(nil);
finalization
CoUninitialize;
end.
?
KosilkA (2004-08-04 16:44:00) [8]сорри про это забыл
procedure CoUninitialize; stdcall; external 'ole32.dll' name 'CoUninitialize';
alexTP (2004-08-04 16:30:00) [9]Удалено модератором
alexTP (2004-08-04 16:29:00) [10]У меня действительно dll.
Поставил CoInitialize(nil) ADOConnection успокоился.
procedure Ini;
begin
CoInitialize(nil);
MainForm:= TMainForm.Create(nil);
end;
Теперь Access violention на MainForm.Free;
procedure Deini;
begin
MainForm.Free;
CoUninitialize;
end;
KosilkA (2004-08-04 16:04:00) [11]
function CoInitialize(pvReserved: Pointer): HResult; stdcall; external 'ole32.dll' name 'CoInitialize';
KSergey (2004-08-04 15:24:00) [12]Переписывать ничего не надо
Достаточно вызвать эту процедуру, увы не помню в каком юните.
Это у вас exe или dll? Обычно с exe таких проблем не возникает, там вызов встроен (Application.Initialize, если не вру), а вот в dll-проект - нет. Не знаю почему.
alexTP (2004-08-04 14:52:00) [13]При инициализации чего ? ADODB.pas переписать ?
KSergey (2004-08-04 14:22:00) [14]Надо просто не стесняться и вызвать при инициализации CoInitialize