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