Domanda

Sto scrivendo un programma C# che funge da plug-in PowerPoint 2007.Su alcune macchine, alcune chiamate al modello a oggetti di PowerPoint lanciano un file COMException con il messaggio RPC_E_SYS_CALL_FAILED.Non sono riuscito a trovare alcun consiglio specifico su cosa fare riguardo a questo errore o su come evitarlo.Da Google sembra che abbia qualcosa a che fare con la coda dei messaggi o gli appartamenti a thread singolo.Oppure sono fuori strada?

Esempio del messaggio di errore è:

Chiamata di sistema non riuscita.(Eccezione da HRESULT:0x80010100 (RPC_E_SYS_CALL_FAILED))
in Microsoft.Office.Interop.PowerPoint._Presentation.get_FullName()

Sfortunatamente, il problema si verifica sul computer di un client, quindi non ho un modo semplice per eseguirne il debug!Dovrei semplicemente riprovare le chiamate ogni volta che ricevo questo errore?

Qualsiasi consiglio per aiutarmi a risolvere questo problema sarebbe molto apprezzato!

È stato utile?

Soluzione

Non so che sia correlato al tuo problema, ma tutte le chiamate COM devono provenire dallo stesso thread su cui è stato creato il componente aggiuntivo.Se hai creato nuove discussioni devi prestare particolare attenzione.I dettagli sono descritti in questi due articoli:

Altri suggerimenti

stai effettuando la chiamata da un thread con il suo ApartmentState impostato?in caso contrario, questo potrebbe essere il colpevole: l'interoperabilità COM è piuttosto esigente su questo genere di cose

Quali sono le impostazioni di sicurezza del client?È molto probabile che le impostazioni di sicurezza del client (impostazioni Windows/sistema operativo o impostazioni PowerPoint/app) non consentano al plug-in di comunicare tramite RPC.

Ciò può accadere molto facilmente se si effettuano chiamate al modello a oggetti di PowerPoint da un thread in background.Uno scenario plausibile è avere un timer che controlla periodicamente una sorta di valore di stato.Se, quando si attiva il timer, PowerPoint è occupato (ad esempio è aperta una finestra di dialogo), la chiamata fallirà.

Questo articolo di Microsoft offre una panoramica del supporto del threading in Office:http://msdn.microsoft.com/en-us/library/8sesy69e.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top