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