发布模式下的Outlook互操作异常(E_NOINTERFACE)

本文关键字:异常 互操作 NOINTERFACE Outlook 布模式 模式 | 更新日期: 2023-09-27 18:20:07

我正在尝试制作一个程序,打开一个新的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。

发布模式如何影响这一点?奇怪的调试模式运行良好。。

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

发布模式下的Outlook互操作异常(E_NOINTERFACE)

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

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

我通过在项目设置->构建->常规中启用"首选32位"解决了这个问题。

也可能在运行时通过dynamic:解析接收方对象

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

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

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

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