来自C#的Outlook 2007 - COM异常,TYPE_E_LIBNOTREGISTERED

PK.*_*PK. 8 c# com interop office-interop outlook-2007

我正在尝试制作一个可以打开新的Outlook 2007消息的程序.

我引用了COM选项卡Microsoft Outlook 12.0 ObjectLibrary.

这些项目出现在VS的参考文献中:

Microsoft.Office.Core
Microsoft.Office.Inerop.Outlook
Run Code Online (Sandbox Code Playgroud)

现在我尝试调用以下代码:

var _outlookInstance = new Microsoft.Office.Interop.Outlook.Application();
var _message = (OutlookApp.MailItem)_outlookInstance.CreateItem(OutlookApp.OlItemType.olMailItem);
Run Code Online (Sandbox Code Playgroud)

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

在调用第二行列表时,我不断收到此异常:( InvalidCastException)

无法将"Microsoft.Office.Interop.Outlook.ApplicationClass"类型的COM对象强制转换为接口类型"Microsoft.Office.Interop.Outlook._Application".此操作失败,因为由于以下错误,对IID为"{00063001-0000-0000-C000-000000000046}"的接口的COM组件的QueryInterface调用失败:库未注册.(HRESULT的例外情况:0x8002801D(TYPE_E_LIBNOTREGISTERED)).

该代码在我的其他工作站上适用于Outlook 2003.

我会很感激任何想法如何解决它.

小智 10

当您卸载Office 2013安装并返回office 2010时,也会发生这种情况.可能会有一些注册表项和dll,这会导致office应用程序加载错误的dll.

以下是修复:http://www.fieldstonsoftware.com/support/support_gsyncit_2013.shtml

  • 很棒的发现 - 删除`HKEY_CLASSES_ROOT\TypeLib\{00062FFF-0000-0000-C000-000000000046}\9.5`就行了!这是**Office 2013卸载程序**的错误. (3认同)

Han*_*ant 5

Office未正确安装在该计算机上.您可以使用Regedit.exe验证,导航到HKEY_CLASSES_ROOT\Interface\{00063001-0000-0000-C000-000000000046}\TypeLib验证类型库GUID(应该是{00062FFF-0000-0000-C000-000000000046}),然后HKEY_CLASSES_ROOT\TypeLib\{00062FFF-0000-0000-C000-000000000046}使用正确的类型验证类型库是否确实已正确注册库版本号.后一部分应该是问题所在.

如果目标计算机运行64位版本的Windows,请尝试将Project + Properties,Build,Platform Target设置为x86.