【问题标题】:Outlook Interop Exception (E_NOINTERFACE) in Release mode发布模式下的 Outlook 互操作异常 (E_NOINTERFACE)
【发布时间】:2016-02-02 03:17:17
【问题描述】:

我正在尝试制作一个可以打开新 Outlook 2013 邮件的程序。 我引用了 Microsoft.Office.Interop.Outlook 15.0.0.0。

在调试模式下运行时一切正常,但在发布模式下崩溃并出现异常:

无法转换 COM 类型的对象 'Microsoft.Office.Interop.Outlook.ApplicationClass' 到接口类型 'Microsoft.Office.Interop.Outlook._Application'。此操作失败 因为接口的 COM 组件上的 QueryInterface 调用 使用 IID '{00063001-0000-0000-C000-000000000046}' 失败,因为 以下错误:不支持此类接口(来自 HRESULT 的异常: 0x80004002 (E_NOINTERFACE))。

代码:

 var _Outlook = new MSOutlook.Application();
 var _MailItem = _Outlook.CreateItem(MSOutlook.OlItemType.olMailItem) as MSOutlook.MailItem;
 var _Recip = _MailItem.Recipients.Add("xxx@yyy.com");
 Recip.Type = (int)MSOutlook.OlMailRecipientType.olTo;

 _MailItem.Recipients.ResolveAll();
 _MailItem.Subject = "xxx";

 _MailItem.Display(false);

其中 MSOutlook = Microsoft.Office.Interop.Outlook 命名空间。

我正在使用 .NET Framework 4.5 和 Outlook 2013。

发布模式如何影响这一点?奇怪的是调试模式工作正常..

如果有任何解决方法的想法,我将不胜感激。谢谢!

【问题讨论】:

    标签: c# com outlook office-interop com-interop


    【解决方案1】:

    尝试显式声明 _Outlook 变量类型:

    MSOutlook.Application _Outlook = new MSOutlook.Application();
    

    【讨论】:

    • 与以前相同的异常.. 似乎它与 64 位有关,因为“首选 32 位”解决了问题 - i.imgur.com/yQXmDua.png
    【解决方案2】:

    我通过在 Project Settings -> Build -> General 中启用“Prefer 32-bit”解决了这个问题。

    也可能在运行时通过动态解析收件人对象:

    var _Recip = ((dynamic)_MailItem.Recipients).Add("xxx@yyy.com");
    

    【讨论】:

      【解决方案3】:

      您尝试在何时何地运行代码?您有机会查看正在运行的进程列表吗?它是否包含 OUTlook.exe 条目?

      尝试使用反射创建一个新的应用程序实例:

      Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application"));
      

      【讨论】:

        猜你喜欢
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多