Перечисление свойств Outlook ContactItem - PullRequest
3 голосов
/ 24 августа 2009

Я пытаюсь перечислить свойства объекта Microsoft.Office.Interop.Outlook.ContactItem (назовем его ci) следующим кодом:

        System.Reflection.BindingFlags bf = System.Reflection.BindingFlags.Default;

        foreach (System.Reflection.PropertyInfo pi in ci.GetType().GetProperties(bf))
        {
            Console.WriteLine("Property Info {0}", pi.Name);
        }

Я на самом деле пробовал несколько комбинаций значений BindingFlag, но свойства никогда не возвращались.

Вот как определяется ContactItem: использование System.Runtime.InteropServices;

namespace Microsoft.Office.Interop.Outlook
{
    [Guid("00063021-0000-0000-C000-000000000046")]
    [CoClass(typeof(ContactItemClass))]
    public interface ContactItem : _ContactItem, ItemEvents_10_Event
    {
    }
}

Вот как определяется _ContactItem (для простоты я сохранил только 3 реквизита):

using System;
using System.Runtime.InteropServices;

namespace Microsoft.Office.Interop.Outlook
{
    [TypeLibType(4160)]
    [Guid("00063021-0000-0000-C000-000000000046")]
    public interface _ContactItem
    {
       [DispId(14848)]
       string Account { get; set; }
       [DispId(63511)]
       Actions Actions { get; }
       [DispId(14913)]
       DateTime Anniversary { get; set; }
    }
}

Может ли кто-нибудь мне помочь?

Заранее спасибо

Bob

1 Ответ

5 голосов
/ 24 августа 2009

вам не нужно определять интерфейсы вручную. Просто добавьте ссылку на «Microsoft Outlook XX.0 Class Library» в ваш проект C #, а затем используйте код, подобный следующему:

using System;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace OutlookTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Outlook.Application olApplication = new Outlook.Application();

            // get nameSpace and logon.
            Outlook.NameSpace olNameSpace = olApplication.GetNamespace("mapi");
            olNameSpace.Logon("Outlook", "", false, true);

            // get the contact items
            Outlook.MAPIFolder _olContacts = olNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
            Outlook.Items olItems = _olContacts.Items;

            foreach (object o in olItems)
            {
                if (o is Outlook.ContactItem)
                {
                    Outlook.ContactItem contact = (Outlook.ContactItem)o;
                    foreach (Outlook.ItemProperty property in contact.ItemProperties)
                    {
                        Console.WriteLine(property.Name + ": " + property.Value.ToString());
                    }
                }
            }
            Console.WriteLine("Press any key");
            Console.ReadKey();
        }
    }
}

Надеюсь, это поможет.

- Фрэнк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...