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

标签 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)

运行标准的从 C# 连接到 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 代理来解决这个问题)?

最佳答案

如果缺少某些 DLL,您是否使用依赖关系查看器进行了检查?我曾经为 rfc 库(至少是它的一部分)编写了一个托管包装器,我记得我下载的一些 rfc 库有问题。一个版本根本不起作用,我也没有弄清楚哪里出了问题。另一个版本(旧版本)工作得很好。

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

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

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

关于c# - 如何使用 sapnwrfc 库连接到 SAP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2342324/

相关文章:

c# - SPA 的 Asp.net 核心 Web API - 如何实现 Swagger 身份验证而无需在 Web API 外部获取访问 token 并传递它?

sap - Sybase ASE - 跟踪查询/进程

java - 如何使用 ksoap2 验证 sap web 服务

android - Unity3d 安卓插件问题

c# - 为什么我尝试打开串口时得到 "CreateFile Failed: 161"?

c# - 使用 Accord.Net 框架的决策树

c# - 带有 LEFT JOIN 条件子查询的 LINQ 查询

sql-server - 从SAP提取数据到SQL Server

linux - 找不到 doc2x linux r649 zlibwapi.dll

macos - Mac 上的 Mono : DllNotFoundException despite SQLite. Interop.dll 在 dllmap 中