【问题标题】:"COM target does not implement IDispatch" exception when opening Outlook.Contact打开 Outlook.Contact 时出现“COM 目标未实现 IDispatch”异常
【发布时间】:2015-10-03 13:04:00
【问题描述】:

我的代码很简单:

using Outlook = Microsoft.Office.Interop.Outlook;

private Outlook.ContactItem contact;

private void OutlookButton_Click(object sender, RoutedEventArgs e)
{
    try 
    {
        contact = new Outlook.ContactItem((Outlook.ContactItem)((Button)sender).Tag);
        contact.Display();

Display() 行引发了与IDispatch 相关的异常:

System.Reflection.TargetInvocationException:COM 目标没有 实现 IDispatch。

有一个绑定到按钮标签的 Outlook 联系人对象,其想法是当单击按钮时它会打开以显示它们。

Outlook(应用程序)未运行。上面第一次可以正常工作,但是如果我第二次单击同一个按钮,则会引发上述异常。

如果尝试使用NetOffice,结果相同。

【问题讨论】:

    标签: c# outlook


    【解决方案1】:

    您不能使用类 ctor 创建 Outlook 项目。相反,您需要使用 Application 类的 CreateItemCreateItemFromTemplate 方法。

    Items 类的 Add 方法也可用于创建新的 Outlook 项目。

    您很可能需要更正代码:

    contact = (Outlook.ContactItem)((Button)sender).Tag);
    contact.Display();
    

    无论如何,我建议将条目 ID 值存储在标签中。您可以随时使用 Namespace 类的GetItemFromID 方法。

    【讨论】:

    • 我修改了我的代码,以便在拉入所有联系人时,将联系人条目 ID(字符串)和 OutlookContact(Outlook.Contact)添加到我的“OfficeContact”对象中。我有一个可观察的集合。我还修改了代码,以便将按钮的 Tag 属性绑定到 EntryID。因此,现在当单击 thr 按钮时,我迭代可观察集合,获取 EntryID 的匹配项,然后尝试 Display() 我的 OfficeContact 的 Office.Contact 对象 - 我最终得到完全相同的错误。所以我认为我更接近了......但“Display()”仍然让我感到沮丧。
    • foreach (OfficeContact aContact in mainWindow.outlookContacts.officeContacts) { if (aContact.OutlookContactEntryID == ourContactEntryID) { aContact.OutlookContactObject.Display(); } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多