2010-11-04 45 views
4

Ceci est une variante de another Q de la mienne. J'ai deux applications, X et Y. Ils doivent partager un seul objet COM entre eux. X enverra des données à cet objet et Y répondra sur les événements envoyés depuis cette application. À tout moment, X ou Y peut être terminé, mais le singleton doit rester en vie jusqu'à ce que les deux applications soient terminées.
Il devrait être possible de créer un objet COM singleton de cette façon, mais que se passe-t-il si X démarre d'abord et le crée, alors Y commence et l'utilise, alors X s'arrête et ... Que devient le singleton?
Quoi qu'il en soit, quelqu'un a déjà essayé cela avec Delphi?Objet singleton multi-processus

Répondre

6

Je pense qu'il vous manque un point central de COM. COM est juste une étape de l'IPC général, par lequel je veux dire, un processus COM vit dans un seul processus (ou thread même, mais c'est là que l'histoire de l'appartement entre). Si vous accédez à un objet COM à partir de deux processus, un processus dirige en réalité les appels depuis et vers l'objet dans des données "à plat" et envoie des messages à un handle de fenêtre masqué à l'autre processus. Pour pouvoir faire ce que vous décrivez, vous devez vous inquiéter de ce que vous voulez faire avec un objet lorsque le «processus propriétaire» veut arrêter, et doit «suspendre» l'objet (par exemple en sérialisant) et demander à un des autres processus pour «reprendre» l'objet et assumer la propriété et commencer à exécuter l'objet.

Je vous suggère de créer un troisième processus, spécifiquement à seulement exécuter cet objet singleton que vous souhaitez utiliser dans les autres processus. De cette façon, vous pouvez laisser normal compter le comptage des références et l'activation COM font son travail, et vous utiliseriez COM juste comme il était censé fonctionner.

+0

Très bonne suggestion! :-) –

+0

Merci, il y a plus d'où ça vient: http://yoy.be/item.asp?i282 –