Форум: "Основная";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
ВнизОшибка при обращении к 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c