SAPbobsCOM类未注册

6

我使用asp.net C#开发了一个用于进行在线订单的网络应用程序。我的应用程序在SAP服务器(Windows 2008 R2)上运行良好,但是当我将项目复制到我的本地机器(运行Windows 7)时,出现了一个错误,无法看到SAPbobsCOM引用。我的机器上没有SAP API DI。
我尝试以X86模式调试我的应用程序来解决这个问题,但没有成功。

这是我得到的错误:

检索具有CLSID {632F4591-AA62-4219-8FB6-22BCF5F60090} 的组件的COM类工厂失败,原因是以下错误:80040154 类未注册(HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))。

enter image description here

谢谢。


2
您需要在此计算机上安装DI-API。当您的.Net代码尝试使用DI-API中定义的类型但无法加载时,就会出现此错误(DI-API使用COM进行互操作)。 - Lilshieste
@Lilshieste 为什么我们必须安装 DI-API,我已经在我的项目中添加了 Interop.SAPbobsCOM.dll。我认为程序使用这个 dll。 - John Nguyen
@JohnNguyen 安装过程会将 DI-API 注册到 COM 中。Interop.SAPbobsCOM.dll 文件只是一个互操作程序集,因此仍然需要进行 COM 注册。 - Lilshieste
@Lilshieste 谢谢你,但是在我重新安装 DI-API 之后,我仍然遇到了这个错误。在 C# 中,这个错误是由以下代码引发的:SAPbobsCOM.Company vcmp = new SAPbobsCOM.Company()。你能帮我吗? - John Nguyen
@Sam,你介意看看我的答案,看看能否标记为被接受的答案以供其他读者参考吗? - Alexander Abakumov
显示剩余3条评论
3个回答

12

这个问题是由于应用程序选择了 Any CPU 平台目标所导致的。

这意味着你的应用程序可能会作为 32xx64 进程运行,具体取决于执行应用程序的 .NET 运行时位数。如果你的进程作为 x64 运行,并且安装了 32x DI API(或反之亦然),则会出现此问题,因为 DI API 需要将本机 DLL 加载到你的进程中。然而,32x DLL 无法加载到 x64 进程中,反之亦然。

这就是为什么我们必须明确允许应用程序与其使用的 DI API 相同的位数。

要实现这一点:

  • 首先,需要安装 SAP DI APIc:\Program Files\SAP\SAP Business One DI API\)和 SAP Business One SDKc:\Program Files (x86)\SAP\SAP Business One SDK\
  • 接下来,找出你拥有的 DI API 版本(x86 或 x64)。如果安装在 c:\Program Files 中,则你拥有 x64 版本,如果安装在 c:\Program Files (x86)\ 中,则你拥有 x86 版本。
  • 最后,转到你的 项目属性 -> 生成 选项卡,并设置与 DI SDK 版本相同的 平台目标: enter image description here

1
在花费了相当多的时间寻找解决此问题的方法后,将我的平台目标从x86更改为x64最终为我解决了这个问题。我最初已将其从任何CPU更改为x86,但从未尝试过x64选项。谢谢! - DLR

5

我遇到了完全相同的问题。我的SAP组件在WCF服务中运行。

为了解决这个问题,我将应用程序池更改为以32位运行。


1
我遇到了相同的问题。这是因为丢失了SAP Business One引用的SAPbobsCOM和SBODI_Server。我添加了这些引用,它就可以工作了。您需要在计算机上添加SAP DI API来使用SAPbobsCOM参考。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接