Что происходит, когда объект висит? то есть откуда ты знаешь, что оно зависло?
Существует множество причин, по которым он мог зависнуть, но одна из них заключается в том, что поток где-то в системе инициализировал COM, но не перекачивает сообщения Windows.
Контролируете ли вы исходный код exe-сервера COM? Это может быть намного проще, чем DLL-сервер, так что вы можете загрузить его в процессе, где ни одна из этих проблем не существует.
Обновление:
Учитывая информацию в комментариях, вы используете COM exe-remoting для решения проблемы 32/64-битного thunking.
Мой опыт работы с серверами COM exe был не чем иным, как ужасным. COM DLL - это действительно простые вещи, COM exe - это очень сложные и ненадежные вещи. Они работают нормально - просто - в некоторых интерактивных сценариях с графическим интерфейсом.
Но вам, вероятно, было бы лучше использовать собственный механизм IPC, как ни странно. Это на самом деле не так сложно. Предположим, 64.exe создает сокет прослушивания, а также поддерживает дескриптор процесса 32.exe, создавая его по требованию. Он может создавать столько, сколько ему угодно, и убивать их по прихоти. Когда запускается 32.exe, он подключается к сокету и читает на нем - вот как это работает. 64.exe отправляет инструкции через принятое сокет-соединение, которое сохраняется вместе с соответствующим дескриптором процесса.
Прелесть этого в том, что если 64.exe внезапно умирает, 32.exe получит ошибку при чтении сокета и умрет также.
Формат того, что вы отправляете в сокет, может быть очень простым. Подсчитанный буфер идеален (отправьте длину, после которой следует столько байтов данных).