我们的软件是用C#编写的,需要连接到SAP . 由于我们的一些客户使用的是旧版本的SAP,而其他客户没有使用SAP PI,因此我们无法通过Web服务进行连接 .
我尝试通过SAP NetWeaver远程函数调用库(sapnwrfc.dll)连接到SAP,如下所示:
-
将sapnwrfc.dll和其他dll从NWRFC_6-20004550.SAR(即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-from-C#示例
[DllImport("user32.dll",CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd,String text,String caption,uint type);
MessageBox(new IntPtr(0),"Hello World!","Hello Dialog",0);
工作良好 .
任何建议如何使这项工作正常(这样我们不需要通过使用JCo编写Java代理来解决此问题)?
2 回答
如果您缺少某些DLL,您是否使用Dependency Viewer进行了检查?我曾经为rfc库编写了一个托管包装器(至少是它的一部分),我记得我下载的一些rfc库有问题 . 一个版本根本不起作用,我没有弄清楚出了什么问题 . 另一个版本(较旧)工作得很好 .
但是我确实遇到了unicode库的问题(一些随机出现的内存访问问题)所以我不得不切换到非unicode版本......
如果我不得不再做一次这样的事情,我会非常认真地考虑买一个连接器:http://www.theobald-software.com/en/products/erpconnect.htm
我不能说它是否有任何好处,但它们似乎已经存在了一段时间了 .
为什么不简单地使用SAP的“.NET Connector”(NCo3)?有关下载页面和文档的链接,请参阅SAP说明856863 .