Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Вниз

CreateOleObject   Найти похожие ветки 

 
Woolen ©   (2007-04-03 11:42) [0]

Если кто знает, подскажите, пожалуйста. Вызываю CreateOleObject в безоконном приложении прямо в .dpr в главном блоке begin end. Передаю в фунцию ProgID. Результат присваиваю к Variant. Получаю: "Exception EOleSysError in module archivesif.exe at 00028191. Не был произведен вызов CoInitialize." Делаю то же самое, но в оконном приложении - все работает. Почему? В чем разница?


 
Reindeer Moss Eater ©   (2007-04-03 11:44) [1]

Потому что не был произведен вызов CoInitialize


 
Сергей М. ©   (2007-04-03 11:48) [2]


> В чем разница?


Уж точно не в наличии или отсутствии каких-то там "окон".
Просто в одном случае Application.Initialize вызывается, а в другом нет)


 
Woolen ©   (2007-04-03 12:10) [3]


> Сергей М. ©   (03.04.07 11:48) [2]

Вот этого я непонял. У меня не вызывается Application.Initialize. У меня вообще модуль Forms не подключен. И что происходит дальше? Если его нет, я не могу вызывать CreateOleObject?


 
Reindeer Moss Eater ©   (2007-04-03 12:13) [4]

Вызови CoInitialize и создавай свои оле объекты наздоровье.


 
KSergey ©   (2007-04-03 12:19) [5]

см тут
http://delphimaster.net/view/4-1175334004/


 
Сергей М. ©   (2007-04-03 12:21) [6]


> Woolen ©   (03.04.07 12:10) [3]


При вызове Application.Initialize происходит неявный вызов CoInitialize().
Не нравится Application ? Делай явный вызов CoInitialize() !


 
Woolen ©   (2007-04-03 12:40) [7]


> Сергей М. ©   (03.04.07 12:21) [6]

Спасибо. Все заработало.


 
Woolen ©   (2007-04-03 15:05) [8]


> Woolen ©   (03.04.07 12:40) [7]

Вру, не все. Если я правильно понимаю, каждый CoInitialize должен закрываться CoUninitialize. Так и сделал. Выглядит примерно так:
begin
CoInitialize(nil);
...
QQQ := CreateOleObject("QQQ.QQQ");
...
if not VarIsClear(QQQ) then
 QQQ := Unassigned;
...
CoUninitialize;
end.

Это вызывает ошибку "Exception EAccessViolation in module ole32.dll at 00057500. Access violation at address 77537500 in module "ole32.dll". Read of address FEEEFEEE." где-то в дельфиском библиотечном коде после последнего моего end. Если вызывать или CreateOleObject, или CoUninitialize, то все работает. Если вместе - появляется вышеозначенная ошибка. Может кто знает, какова ее природа и что с этим делать? Спасибо


 
Сергей М. ©   (2007-04-03 15:09) [9]

begin
CoInitialize(nil);
try
  ...
  QQQ := CreateOleObject("QQQ.QQQ");
  try
    ...
  finally
    QQQ := Unassigned;
  end;
  ...
finally
  CoUninitialize;
 end;
end.


 
umbra ©   (2007-04-04 11:03) [10]

вот генофонд :)
procedure TApplication.Initialize;
begin
 if InitProc <> nil then TProcedure(InitProc);
end;

InitProc значение присваивается при инициализации модуля ComObj


 
KSergey ©   (2007-04-04 12:02) [11]

Вообще-то CoInitialize(nil) достаточно вызвать 1 раз при инициализации приложения.
Ну и CoUn.... тоже один, призавершении


 
Сергей М. ©   (2007-04-04 12:05) [12]


> достаточно вызвать 1 раз при инициализации приложения.


Если приложение мультипоточное и в доп.потоках есть OLE/COM-вызовы, то недостаточно.


 
palva ©   (2007-04-04 16:58) [13]

Woolen ©   (03.04.07 15:05) [8]

> Может кто знает, какова ее природа и что с этим делать?

Природа ее такова что при финализации модуль ComObj сам вызывает CoUnInitialize, но делает это, если выполняются определенные условия.

А что с этим делать, непонятно. Можно плюнуть на это и вообще не писать CoUnInitialize. Но с другой стороны у меня есть примеры, когда ComObj не вызывает CoUnInitialize, следовательно если я сам его не вызову, наступит некоторая некорректность. Хорошо бы научиться сигнализировать ComObj, что я сам вызвал CoUnInitialize.


 
Loginov Dmitry ©   (2007-04-04 20:30) [14]

Сталкивался недавно тоже с проблемами при вызове CoUnInitialize() в дополнительном потоке (в коде DLL). Проблема была в том, что библиотека просто выгружалась. Пришлось убирать CoUnInitialize().



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.038 c
15-1174957429
Gero
2007-03-27 05:03
2007.04.22
Посоветуйте проигрыватель звука


1-1172073940
DelphiLexx
2007-02-21 19:05
2007.04.22
Плоский ScrollBar


15-1175081770
Юрий
2007-03-28 15:36
2007.04.22
Вложенные запросы SQL


2-1175110813
Washington
2007-03-28 23:40
2007.04.22
Таблица типа Excel


2-1175183362
mahab
2007-03-29 19:49
2007.04.22
TImage





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский