Непонятное поведение COM сервера
От: MadMax  
Дата: 11.01.02 17:58
Оценка:
Здравствуйте, уважаемые!

Вопросец вот есть... Никак сам не разберусь.

Есть COM сервер. Это, в общем, Outlook, но на данном этапе, как мне кажется, это неважно. Есть DLL, которая сидит в адресном пространстве этого COM сервера. И вот очень хотелось бы получить доступ в одном из методов этой ДЛЛ к COM серверу. Что я делаю:

1) Импортирую все как положенно.
2) Выполняю где-то такой код:
...
CoInitialize(NULL);

try
{
OL::_ApplicationPtr pOutlook("Outlook.Application");
OL::_NameSpacePtr pNameSpace = pOutlook->GetNamespace("MAPI");
}
catch (_com_error &e)
{
dump_com_error(e);
}

CoUninitialize();

Если этот код написан в тестовом exe, то он отрабатывает ОТЛИЧНО — использует уже запущенный Outlook. Если же этот код выполняется в DLL, которая уже сидит в адресном пространстве COM сервера (в данном случае — как старомодный не-COM плугин) — то это счастье виснет на вызове OleRun в дебрях строчки OL::_ApplicationPtr ........ на приличное время (порядка 4х минут), после чего вываливается с ошибкой 0x80080005 — Server execution failed. В это же время в Task Manager можно наблюдать попытки запустить второй Outlook.exe — видимо, чтобы получить этот самый Outlook.Application.

Встречался ли кто-либо с таким необычным поведением? Почему этот код просто не начинает использовать уже запущенный COM сервер?..

Заранее спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.