![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADOConnect := TADOConnection.Create(Application) -> EOleSysError [D7]
Sphinx © (2006-05-09 08:51:00)В динамическую библиотеку (.dll) передаю
Applicationиз вызывающего приложения и пытаюсь создать экземпляр TADOConnection:
ADOConnect := TADOConnection.Create(App);
на этой строке у меня почему-то выскакивает исключение EOleSysError с сообщение 'не был произведен вызов CoInitialize' причем по русски (может имеет значение, Делфя сама - английская).
Если это же действие выполнить в приложении (.ехе) то ошибка не наблюдается, что я забыл учесть ???
Заранее признателен за ответ.
isasa (2006-05-09 11:08:00) [1]Для "самодостаточности" DLL добавить в DllEntryPoint (DLL_PROCESS_ATTACH)
для
CoInitializeEx(nil, COINIT_APARTMENTTHREADED ); // STA модель
для
CoInitializeEx(nil, COINIT_MULTITHREADED ); // MTA модель
в DllEntryPoint (DLL_PROCESS_DETACH)
CoUninitialize;
в приложении, "на всякий случай" :)
...
CoInitFlags:= COINIT_APARTMENTTHREADED; // STA модель
//или CoInitFlags:= COINIT_MULTITHREADED; // MTA модель
Application.Initialize;
...
Anatoly Podgoretsky (2006-05-09 10:10:00) [2]'не был произведен вызов CoInitialize'
А нужно для того, чтобы был произведен вызов CoInitialize
Sphinx (2006-05-09 09:14:00) [3]2 Anatoly Podgoretsky ©
Поверхностно пробежался по исходникам ADO и честно не понял какой именно интерфейс не вызывает CoInitialize. Дебагер ни в какую не заходит в эти исходники =(
Сейчас параллельно читаю и стараюсь понять как работает ADO, хотя бы в общих чертах и чем для него отличается .dll и .exe
Так то проблем вызвать - ни каких...но не могу найти для чего именно...
Anatoly Podgoretsky (2006-05-09 09:04:00) [4]Ну и почему бы не выполнить эту рекомендацию?