Outlook Interop提供不同的结果

时间:2010-07-12 11:45:21

标签: c# interop outlook

我正在使用Outlook-Interop从不同的日历中读取一些事件并在大屏幕上显示它们。在我的机器上一切正常(Outlook 2010,Win7 x64),但在客户端的PC(Outlook2003,Win XP)上,该程序找不到所有约会。如果我添加一些用于调试的复选框,工具会找到8到12个约会(它应该找到12个)而且总是没有6个。我不知道出了什么问题,所以请帮帮我。

以下是代码:

this.Appointments = new List<AppointmentItem>();

foreach (MAPIFolder folder in this.SelectedCalendars)
{
    foreach (object app in folder.Items)
    {
        if (app is AppointmentItem && ((AppointmentItem)app).Start.Date == DateTime.Now.Date)
        {
            this.Appointments.Add(((AppointmentItem)app));
        }
    }
}

this.Appointments.Sort(
    delegate(AppointmentItem App1, AppointmentItem App2)
    {
        return App1.Start.CompareTo(App2.Start);
    });

更新

我有一些新信息。得到了这个例外。知道如何处理?

(我从德语翻译成英语;希望你能理解;)

  

“System .__ ComObject”类型的COM-Object不可能   改为Interfacetype   “Microsoft.Office.Interop.AppointmentItem。       无法运行此过程,因为Queryinterface-Call to the       用于IID接口的COM-Component   “{00063033-0000-0000-C000-000000000046}”        因以下错误而无法运行:       不支持接口(例外_HRESULT:0x80004002(E_NOINTERFACE))。

2 个答案:

答案 0 :(得分:0)

它可能是COM对象失败的迭代器。

如果您重新编写循环以明确调用GetFirst()GetNext(),它是否有效:

object app = folder.Items.GetFirst();
while (app != null)
{
    if (app is AppointmentItem && ((AppointmentItem)app).Start.Date == DateTime.Now.Date)
    {
        this.Appointments.Add(((AppointmentItem)app));
    }
    app = folder.Items.GetNext();
}

您还可以尝试在开始日期过滤Items集合。

var items = folder.Items.Restrict("[Start] < '01/31/2009 00:00 AM' and [Start] >= '01/30/2009 00:00 AM");

答案 1 :(得分:0)

确保您受到2003版Office Interops的约束,该版本应该是向前兼容的。