2010-12-01 32 views
0

je suis en train d'accéder à certaines informations d'une application Microsoft Word en cours d'exécution en utilisant le code suivant ..Utilisation de la liaison tardive pour automatiser Word est de lancer un MissingMemberException

object appClass = Marshal.GetActiveObject("Word.Application"); 
object documents = appClass.GetType().GetProperty("Documents"); 
object count = documents.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, documents, null); 

Quand je lance ce code, il me dit que ce Le compte n'a pas été trouvé et a généré une exception MissingMemberException. Est-ce que quelqu'un peut me dire ce que je fais mal?

Répondre

0

Vous n'avez pas reçu de référence à l'objet Documents, GetProperty renvoie un PropertyInfo. Correction:

 object appClass = Marshal.GetActiveObject("Word.Application"); 
     object documents = appClass.GetType().InvokeMember("Documents", BindingFlags.GetProperty, null, appClass, null); 
     object count = documents.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, documents, null); 

Ajout d'une référence à Microsoft.Office.Word.Interop peut faire cela beaucoup moins douloureux.

+0

Oh joie, je peux sentir cet insigne héros méconnu maintenant! –