Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.05;
Скачать: 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.012 c
1-14575
valerchik
2002-11-21 22:20
2002.12.05
Подсчет слов в файле !!!


7-14842
max2057
2002-10-05 09:21
2002.12.05
С чего начинается Родина или Как выключаются Windows


3-14461
Брат
2002-11-18 16:20
2002.12.05
Количество записей в таблице...


1-14500
vaneks
2002-11-25 21:31
2002.12.05
Помогите!!! Как узнать версию файла?


8-14696
SERCAM
2002-08-18 23:52
2002.12.05
Как сделать позитив с негатива цветной плёнки?