Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用sapnwrfc库连接到SAP?_C#_Sap_Dllnotfoundexception_Saprfc - Fatal编程技术网

C# 如何使用sapnwrfc库连接到SAP?

C# 如何使用sapnwrfc库连接到SAP?,c#,sap,dllnotfoundexception,saprfc,C#,Sap,Dllnotfoundexception,Saprfc,我们的软件是用C语言编写的,需要连接到SAP。由于我们的一些客户使用较旧版本的SAP,而其他客户没有SAP PI,因此我们无法通过Web服务进行连接 我尝试通过SAP NetWeaver远程函数调用库(sapnwrfc.dll)连接到SAP,如下所示: 从NWRFC_6-20004550.SAR添加sapnwrfc.dll和其他dll (分别为icudt34.dll、icuin34.dll、icuuc34.dll、LIBICUDCNUMBER.dll和libsapucum.dll) 到C:\W

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

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

  • 从NWRFC_6-20004550.SAR添加sapnwrfc.dll和其他dll (分别为icudt34.dll、icuin34.dll、icuuc34.dll、LIBICUDCNUMBER.dll和libsapucum.dll) 到C:\WINDOWS\system32,以确保可以找到它们
  • 在我的C#代码中,在类定义中添加以下内容:
    [DllImport(“sapnwrfc.dll”,CharSet=CharSet.Auto)]
    公共静态外部无效RfcInit()
    在应该做这项工作的方法中有以下几点:
    RfcInit()
运行此代码会产生DllNotFoundException:
无法加载DLL“sapnwrfc.DLL”:由于应用程序配置不正确,此应用程序无法启动。重新安装应用程序可能会解决此问题。(HRESULT的异常:0x800736B1)

运行标准的connect-to-C++-from-C#示例
[DllImport(“user32.dll”,CharSet=CharSet.Unicode)]
公共静态外部int消息框(IntPtr hWnd、字符串文本、字符串标题、uint类型)
MessageBox(新IntPtr(0),“Hello World!”,“Hello Dialog”,0)
很好


有什么建议可以让这项工作正常进行(这样我们就不需要通过使用JCo编写Java代理来解决这个问题)?

如果缺少一些DLL,您是否向依赖项查看器进行了检查?我曾经为rfc库编写过一个托管包装器(至少是其中的一部分),我记得我下载的一些rfc库出现了问题。一个版本根本不起作用,我也不知道哪里出了问题。另一个版本(旧版本)运行良好

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

如果我必须再做这样的事情,我会认真考虑买一个连接器:


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

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

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

问得好-不知道,对不起。另外,将其标记为RFC。如果您在java回退方面需要帮助,请随时询问:-)可能是因为SAP在2010年2月还没有发布NCo3?;)嗯,这可能是一个合理的理由……;)但我最好现在就把我的评论留给今天读这篇文章的人。好吧,这很有说服力。我对你的幽默感投了一票(当然也是正确的答案)