如何通过SAP NetWeaver RFC库(sapnwrfc.dll)从C#连接到SAP?

时间:2010-02-26 14:40:21

标签: c# sap dllnotfoundexception saprfc

我们的软件是用C#编写的,需要连接到SAP。由于我们的一些客户使用旧版SAP,而其他客户没有SAP PI,我们无法通过网络服务进行连接。

我尝试通过SAP NetWeaver远程函数调用库(sapnwrfc.dll)连接到SAP,如下所示:

  • 从NWRFC_6-20004550.SAR添加sapnwrfc.dll和其他dll   (是icudt34.dll,icuin34.dll,icuuc34.dll,libicudecnumber.dll和libsapucum.dll)   到C:\ WINDOWS \ system32,以确保找到它们。
  • 在我的C#代码中,在类定义中添加以下内容:
    [DllImport(“sapnwrfc.dll”,CharSet = CharSet.Auto)]
    public static extern void RfcInit();
      以及应该做的工作方法中的以下内容:
    RfcInit();

运行此代码会产生DllNotFoundException:
无法加载DLL'sapnwrfc.dll':此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。 (HRESULT异常:0x800736B1)

运行标准的connect-to-C ++ - 来自-C#示例
[DllImport(“user32.dll”,CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd,String text,String caption,uint type);
MessageBox(新的IntPtr(0),“Hello World!”,“Hello Dialog”,0);
工作正常。

如何使这项工作正常的任何建议(以便我们不需要通过使用JCo编写Java代理来解决此问题)?

3 个答案:

答案 0 :(得分:2)

如果您缺少某些DLL,您是否使用了Dependency Viewer?我曾经为rfc库编写了一个托管包装器(至少是它的一部分),我记得我下载的一些rfc库有问题。一个版本根本不起作用,我没有弄清楚出了什么问题。另一个版本(较旧)工作得很好。

但是我确实遇到了unicode库的问题(一些随机出现的内存访问问题)所以我不得不切换到非unicode版本......

如果我不得不再做一次这样的事情,我会非常认真地考虑买一个连接器: http://www.theobald-software.com/en/products/erpconnect.htm

我不能说它是否有任何好处,但它们似乎已经存在了一段时间。

答案 1 :(得分:2)

为什么不使用SAP的.NET连接器" (NCo3)? 有关下载页面和文档的链接,请参阅SAP说明856863。

答案 2 :(得分:0)

请尝试将icudt34.dll,icuin34.dll,icuuc34.dll,libicudecnumber.dll和libsapucum.dll复制到项目的bin目录中。我试过了,效果很好。