Главная страница
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.02 c
1-14559
Сергей_М
2002-11-23 21:19
2002.12.05
Отркрыть файл в HEX формате


1-14644
ork
2002-11-21 13:30
2002.12.05
Проверка орфографии и подсветка синтаксиса в RichEdit


4-14881
Igor_thief
2002-10-20 18:57
2002.12.05
ProgressBar и StatusBar


3-14392
Spartak
2002-11-14 20:42
2002.12.05
Какие файлы использует приложение с базой данных ?


3-14462
JurMax
2002-11-18 20:28
2002.12.05
Как прочитать формат JPEG из SQLServer 2000