Question

J'écris un programme C # qui agit comme un plugin PowerPoint 2007. Sur certaines machines, certains appels au modèle objet PowerPoint émettent une COMException avec le message RPC_E_SYS_CALL_FAILED . Je ne trouvais aucun conseil spécifique sur la marche à suivre pour cette erreur ou sur la façon de l'éviter. D'après Google, cela ressemble à quelque chose à voir avec la file de messages ou les appartements à un seul thread. Ou est-ce que je suis loin?

Exemple de message d'erreur:

  

L'appel système a échoué. (Exception de HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))

  sur Microsoft.Office.Interop.PowerPoint._Presentation.get_FullName ()

Malheureusement, le problème se produit sur la machine d'un client, je n'ai donc aucun moyen facile de le déboguer! Dois-je simplement réessayer les appels chaque fois que je reçois cette erreur?

Tous les conseils pour m'aider à résoudre ce problème seraient grandement appréciés!

Était-ce utile?

La solution

Je ne sais pas si cela est lié à votre problème, mais tous vos appels COM doivent provenir du même thread que celui sur lequel le complément a été créé. Si vous avez créé de nouveaux fils, vous devez faire particulièrement attention. Des détails sont décrits dans ces deux articles:

Autres conseils

passez-vous l'appel depuis un fil avec son ensemble ApartmentState? sinon, c’est peut-être le coupable - COM Interop est assez capricieux à propos de ce genre de chose

Quels sont les paramètres de sécurité du client? Il est fort possible que les paramètres de sécurité du client (paramètres Windows / OS ou PowerPoint / App) ne permettent pas à votre plug-in de communiquer via RPC.

Cela peut très facilement arriver si vous appelez le modèle d'objet Powerpoint à partir d'un thread en arrière-plan. Un scénario plausible est d'avoir une minuterie qui vérifie périodiquement une sorte de valeur de statut. Si, lors du déclenchement du minuteur, Powerpoint est occupé (par exemple, une boîte de dialogue est ouverte), l'appel échouera.

Cet article de Microsoft donne un aperçu de la prise en charge du threading dans Office: http://msdn.microsoft.com/en-us/library/8sesy69e. aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top