Вниз
Скачать: CL | DM;

COM в консольном приложении на Delphi   Найти похожие ветки 

← →
neXt ©   (2002-11-25 12:58) [0]

У меня появилась необходимость использовать COM в консольном приложении. Так как в консоли нет строки вроде
Application.Initialize;
я ставлю в начало всего
CoInitialize(nil);
а в конец
CoUninitialize;
так вот всё работает, но при завершении программы вылетает AV причём, если убрать CoUninitialize то ошибка не повторяется.
Ещё - ошибка не повторяется под отладчиком.
И ещё - это всё справедливо только для COM-сервера MSXML3.
D5.
MSXML2_TLB - получен обычным импортом библиотеки типов msxml3.dll
Пример:

program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, ActiveX, MSXML2_TLB;
var
D: IXMLDOMDocument;
begin
CoInitialize(nil);
try
D := CoDOMDocument.Create;
finally
CoUninitialize;
end;
end.


Вопрос:
1. Почему
2. Что страшного в том что я уберу CoUninitialize, избавившись таким образом от ошибки.
3. и как это скажется на параллельной работе нескольких экземпляров моей программы.


← →
neXt ©   (2002-11-25 13:08) [1]

> И ещё - это всё справедливо только для COM-сервера MSXML3.
- наврал, это справедливо, для любого COM сервера


← →
Romkin ©   (2002-11-25 13:31) [2]

Наверняка ведь используешь COMObj в проекте :-))
1. Вместо CoInitialize лучше бы поставить
if InitProc <> nil then TProcedure(InitProc);
Так грамотнее, TApplication.Initialize именно это и делает :-)) Инициализация COM выполнится там, COMObj вставляет.
2. CoUnitialize убери - COMObj выполняет этот вызов в секции finalization


← →
neXt ©   (2002-11-25 13:36) [3]

нет COMObj не использую.


← →
Romkin ©   (2002-11-25 13:42) [4]

Используешь, куда ты денешься :-))
см список в uses в модуле MSXML2_TLB.pas :-)) Там упоминается, этого достаточно, самому в uses проекта можно не ставить


← →
neXt ©   (2002-11-25 13:42) [5]

можно подробнее - ПОЧЕМУ?


← →
Romkin ©   (2002-11-25 13:48) [6]

Почему что? почему, если хоть где-то в uses модуль прописан, то он к проекту линкуется или почему InitProc надо выполнять?


← →
neXt ©   (2002-11-25 13:49) [7]

Всё, допёр.
Ошибка идёт от повторного вызова CoUnitialize в COMObj,
с CoInitialize такой петрушки нет, так как она в COMObj вызывается не на инициализацию



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
4-14889
Демонов Е.В.
2002-10-23 15:05
2002.12.05
Вопрос про сообщения


1-14672
Beginer1
2002-11-23 16:50
2002.12.05
произведение двух матриц


3-14459
berezne
2002-11-18 17:33
2002.12.05
Индексация БД


1-14514
valerchik
2002-11-26 14:17
2002.12.05
Файлы....запись и чтение...


6-14704
Itap
2002-10-08 11:11
2002.12.05
Отправка файла по почте




   Наверх