Comment faire pour que la méthode de l’object COM ne soit pas exécutée dans le thread principal

J’ai un service Windows qui implémente un serveur local COM.

Lors de l’exécution en tant qu’application, les méthodes d’object COM sont appelées dans un thread distinct (pas dans le thread principal), ce qui convient parfaitement. Les choses changent lors de l’exécution en tant que service – alors les méthodes d’object COM sont appelées dans le contexte du thread de service, ce qui n’est pas cool pour moi.

Je vois que cela a à voir avec les appartements, MTA, STA et ainsi de suite .. mais je ne peux pas comprendre comment forcer COM à appeler mes méthodes d’object dans un thread séparé et pas dans le service.

Peut-être cela a-t-il quelque chose à voir avec l’enregistrement de l’object com au démarrage du service?

Mon environnement est Windows 7 + Delphi mais les solutions c ++ sont les bienvenues.

Mise à jour 26-04-2011 :
Bravo à @sharptooth et @Chris Dickson qui m’ont fait rechercher une solution en direction des “boucles de message”.

Comme il s’agit de STA, l’application s’appuie sur une pompe à messages pour transmettre les messages COM au thread qui a enregistré la coclasse. J’ai transféré l’enregistrement des coclasses dans des threads séparés qui ont une boucle de messages et tous les appels sont maintenant exécutés dans ce thread. J’avais déjà essayé cette approche mais j’ai oublié la boucle de message, c’était la pièce manquante du puzzle. Merci les gars!

Les objects seront invoqués sur n’importe quel thread depuis lequel vous les avez enregistrés. Si vous souhaitez que les objects soient appelés dans un appartement séparé (STA), vous devez enregistrer les objects de classe de cet appartement. Cela peut être accompli en créant un thread séparé et en s’inscrivant à partir de là.