У меня есть служба Windows, которая реализует локальный сервер COM.
При запуске в качестве приложения методы COM-объекта вызываются в отдельном (не в основном) потоке, что просто отлично.Ситуация меняется при запуске в качестве службы - тогда методы COM-объекта вызываются в контексте потока службы, что мне не нравится.
Я вижу, что это связано с квартирами, MTA, STA и так далее.... но я не могу понять, как заставить COM вызывать методы моего объекта в отдельном потоке, а не в служебном.
Может быть, это как-то связано с регистрацией объекта com при запуске службы?
Моя среда - Windows 7 + Delphi, но решения на C ++ приветствуются.
Обновление 2011-04-26 :
Слава @sharptooth и @Chris Dicksonэто заставило меня искать решение в направлении «петель сообщений».
Поскольку это STA, приложение полагается на насос сообщений для доставки сообщений COM потоку, который зарегистрировал coclass.Я переместил регистрацию coclass в отдельный поток, в котором есть цикл сообщений, и теперь все вызовы com выполняются в этом потоке.Я пробовал этот подход раньше, но забыл о цикле сообщений, так что это был недостающий фрагмент головоломки.Спасибо, ребята!