Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.05;
Скачать: CL | DM;

Вниз

Ошибка при обращении к DCOM обьекту   Найти похожие ветки 

 
Maxim Pshevlotsky ©   (2003-05-24 12:44) [0]

Здравствуйте Мастера! Возникает ошибка при обращении к DCOM обьекту(точнее к удаленному модулю данных).
Делаю все вроде как по инструкции:

var Vrem, DCOMData: IDComData;
begin
Vrem:=CoDComdata.Create;
Vrem.QueryInterface(IDcomData,DComData);
<...>

Ошибку пишет такую:
... raised exception class EOleSysError with message "Не был произведен вызов CoInitialize" ...

В чем проблема?


 
Юрий Федоров ©   (2003-05-24 13:06) [1]

Если делаешь это в инициализации - то такая проблема была


 
Maxim Pshevlotsky ©   (2003-05-24 13:07) [2]

Юрий Федоров © (24.05.03 13:06)
Это я делаю при обращении к DLL


 
sniknik ©   (2003-05-24 13:23) [3]

на ошибку "Не был произведен вызов CoInitialize" ... достойный ответ произвести этот вызов! :о)
так
CoInitialize(nil) (а после "разынициализировать")


 
Maxim Pshevlotsky ©   (2003-05-24 13:37) [4]

sniknik © (24.05.03 13:23)
Пардон, а как его вызвать та, и вообще ну хто это такой?(глупый вопрос знаю ;))


 
sniknik ©   (2003-05-24 13:45) [5]

uses ActiveX;

begin
CoInitialize(nil);
....{код}....
CoUnInitialize();
end.

+ встаеш курсором на CoInitialize и нажимаеш Ctrl+F1.


 
Юрий Федоров ©   (2003-05-24 13:49) [6]

>>sniknik © (24.05.03 13:45)
Самое странное то, что это не всегда помогает :-)


 
sniknik ©   (2003-05-24 14:07) [7]

это помогает всегда если ставить до вызова обьектов COM, если умудрится поставить позже то конечно.


 
Maxim Pshevlotsky ©   (2003-05-24 14:11) [8]

Все работает ОК!, только при вызове CoUnInitialize() возникает OLE ошибка. Я её не вызываю и все вроде в порядке.
Странно... :|


 
sniknik ©   (2003-05-24 14:35) [9]

они у тебя гдето пересекается. должны быть строго парные
CoInitialize
CoUnInitialize();
а так дельфи тоже производит вызов то ... гдето путаница.
кстати если так(используеш модуль где идет вызов - ComObj) то возможно тебе не нужно вызывать его самому, просто передвинуть свой код
Vrem:=CoDComdata.Create;
Vrem.QueryInterface(IDcomData,DComData);
подальше, после вызова initialization из ComObj.




 
VaS ©   (2003-05-24 15:09) [10]

CoInitialize() создает апартамент COM. Должна вызываться в каждой нити, в которой планируется осуществлять вызовы методов COM-объектов. Если же в данной нити создается СОМ-объект, методы которого будут вызываться из других апартаментов (кроме модели free), то также необходимо организовать цикл выборки сообщений windows. Для главной нити CoInitialize() вызывается автоматически при подключении модуля ComObj.


 
Maxim Pshevlotsky ©   (2003-05-24 16:04) [11]

Все заработало, меня только смущает медлительность инициализации всего этого. Процессор у меня мощный, а "рожается" долго :(


 
Maxim Pshevlotsky ©   (2003-05-24 16:19) [12]

sniknik © (24.05.03 14:35)
Кстати Да действительно, если тестируешь без дельфи то никаких ошибок не происходит.



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

Текущий архив: 2003.06.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
14-13422
Holy
2003-05-19 13:07
2003.06.05
Использовать ли классы


3-13059
Andrey02
2003-05-17 14:30
2003.06.05
Совместимость БД MS Access .mdb и Delphi ADO/BDE


14-13409
k-man
2003-05-13 19:19
2003.06.05
О Кино...


1-13120
Checist [root]
2003-05-25 18:59
2003.06.05
WinApi возвращается !


1-13191
Doc
2003-05-26 22:54
2003.06.05
Мерцание RichEdit.