9

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

我从 COM 选项卡 Microsoft Outlook 12.0 ObjectLibrary 中引用。

这些项目出现在 VS 的参考资料中:

Microsoft.Office.Core
Microsoft.Office.Inerop.Outlook

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

var _outlookInstance = new Microsoft.Office.Interop.Outlook.Application();
var _message = (OutlookApp.MailItem)_outlookInstance.CreateItem(OutlookApp.OlItemType.olMailItem);

其中 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。

对于如何解决它的任何想法,我将不胜感激。

4

4 回答 4

10

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

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

于 2012-09-14T05:57:42.250 回答
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。

于 2010-02-27T16:44:37.133 回答
1

如果您尝试从 Visual Studio 访问 Outlook 并收到错误消息:

TF400424:无法发送到 Microsoft Outlook:无法将类型为“Microsoft.Office.Interop.Outlook.ApplicationClass”的 COM 对象转换为接口类型“Microsoft.Office.Interop.Outlook._Application”。此操作失败,因为 IID 为“{00063001-0000-0000-C000-000000000046}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:库未注册。(来自 HRESULT 的异常:0x8002801D (TYPE_E_LIBNOTREGISTERED))。

请执行下列操作:

  1. 使用注册表导航到: HKEY_CLASSES_ROOT\TypeLib{00062FFF-0000-0000-C000-000000000046}
  2. 根据下面提供的版本表,删除系统上未安装的任何 Outlook 版本的版本键(例如 9.5)。例如,如果您不使用 Outlook 2013,则删除“9.5”条目。如果您不使用 Outlook 2010,请删除“9.4”条目。不要删除步骤 #1中配置的版本条目

展望 2007 ==> 9.3

展望 2010 ==> 9.4

展望 2013 ==> 9.5

在此处输入图像描述


参考: https: //support.netdocuments.com/hc/en-us/articles/205219170--Library-Not-Registered-error-when-using-EMS-in-Outlook

于 2017-01-24T20:36:18.327 回答
0

以下代码有同样的问题:

Dim OutlookMessage As Outlook.MailItem
Dim AppOutlook As New Outlook.Application
OutlookMessage = AppOutlook.CreateItem(Outlook.OlItemType.olMailItem)

用以下内容替换第一行为我解决了这个问题。

 Dim OutlookMessage As Object

(VB 中的示例,但同样适用于 C#)

于 2017-01-15T11:14:21.443 回答