Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-14816
lak
2002-11-14 17:27
2002.12.05
флэш в делфях


14-14754
RV
2002-11-14 15:43
2002.12.05
Задача


1-14564
ret_Avr
2002-11-24 19:43
2002.12.05
Как StringGrid отправить в Word?


4-14877
VICTOR_
2002-10-24 22:38
2002.12.05
Хочу словить сообщение от вторичного потока


14-14794
KDS
2002-11-15 11:30
2002.12.05
Прикольные фразы из компутерной жизни





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский