vba - MS Access 无法连接到 SAP“无法加载 LibRfc32.dll”错误 - VBA - SAP
问题描述
如何修复从 Microsoft Access 365 调用时无法加载 librfc32.dll 错误?
我已经尝试了在网上找到的常见故障排除步骤,如下所列,需要帮助。
注意:这是一个已有 25 年历史的复杂大型应用程序,我无法升级到比 SAP GUI 7.40 更新的版本,因为其他应用程序需要它。我无法在 Access VBA 中重写 Web 服务调用,因为它被明确排除在我的项目之外。这是一个从 Access 10 到 Access 365 的更新项目,没有时间用于重写。
注意:这是一台服务器机器,我无法安装 DependencyWalker、Visual Studio 或其他诊断工具。
尝试使用 librfc32.dll 将数据发送到 SAP 时,我在 Microsoft Access 365 中收到此错误:
无法加载 DLL 'librfc32.dll' 找不到指定的模块。(来自 HRESULT 0x8007007E 的异常)
错误是无法加载 librfc32.dll 或它所依赖的 DLL 之一。
平台:
- Windows Server 2016,64 位
- Microsoft Access 365 32 位
- SAP GUI 7.40 补丁级别 13 前端工具应用程序 - SAP NetWeaver v7400.3.13.1130 - 内部版本 1756678 - 补丁级别 13
- Librfc32.dll 是 SAP 7.40 GUI 前端工具应用程序的一部分
笔记:
- 我们无法升级到 SAP GUI 7.5 或更高版本,因为它被同一台机器上的其他应用程序使用
- MSAccess 应用程序刚刚从 MSAccess 2010 升级
- MSAccess 应用程序没有为 SAP DLL 或 OCX 文件设置任何依赖项
- Librfc32.dll 依赖于基于“dumpbin.exe /dependents librfc32.dll”的这些其他 DLL。Dumpbin.exe 是 Visual Studio 2019 的一部分。Visual Studio 2019 未安装在出现无法加载 DLL 错误的计算机上。
- Librfc32.dll 依赖项 - 所有这些都在 C:\Windows\SysWow64 中。ole32.dll、RPCRT4.dll、OLEAUT32.dll、KERNEL32.dll、ADVAPI32.dll、USER32.dll、WS2_32.dll、IPHLPAPI.DLL、NETAPI32.dll、SHELL32.dll、dbghelp.dll、VERSION.dll、MSVCR110。 dll
到目前为止,我们已经尝试过并且都给出了相同的无法加载 DLL 错误:
- 试用 1 - 在安装 SAP GUI 7.40 之前运行 MSAccess 应用程序
- 试用 2 - 安装 SAP GUI 7.40
- 试用 3 - 在 MSAccess 应用程序中,添加对 C:\Windows\SysWow64\librfc32.dll 的引用
- 试用 4 - 使用“regsvr32 librfc32.dll”注册 librfd32.dll
- 试用 5 - 在 MSAccess 应用程序中,从 SAP GUI 应用程序添加对以下 DLL 的引用。这是来自 2009 年的类似 Access 2010 SAP GUI 7.20 问题,所有 DLL 都存在于有错误的机器上:https ://answers.sap.com/questions/6537228/access-calls-sap-rfc-function -modules.html
- regsvr32 c:\程序文件 (x86)\sap\frontend\sapgui\wdobapi.ocx
- regsvr32 c:\program files (x86)\common files\sap shared\wdtlog.ocx
- regsvr32 c:\windows\SysWOW64\librfc32.dll
- regsvr32 c:\程序文件 (x86)\sap\frontend\sapgui\wdtaocx.ocx
- regsvr32 c:\程序文件 (x86)\sap\frontend\sapgui\wdtfuncs.ocx
- 试用 6 - 检查 Windows 事件日志。运行 MSAccess 应用程序并生成错误消息。再次检查 Windows 事件日志。未找到与此错误相关的消息
- 试验七——将 librfc32.dll 和 librfc32u.dll 复制到 MSAccess.exe 所在的 Microsoft Office 可执行文件目录中
- 试用 8 - 将 C:\Windows\SysWow64 添加到 PATH 环境变量不起作用。启动 DOS,“SET PATH=%PATH%;C:\Windows\SysWow65; 然后从 DOS 命令行运行 MSAccess
- 试用 9 - 验证 msvcr110.dll、msvcp110.dll、MFC*.dll 在 C:\Windows\SysWow64 中。Dumpbin.exe 根据 librfc32.dll 的需要显示这些 DLL 的 v110。这被https://answers.sap.com/questions/3505999/librfc32dll-not-found-on-windows-server-2003.html引用
librfc32.dll 的类似问题的相关参考链接。请注意,这些应用程序的使用期限最长为 15 年,其中许多建议适用于过时的应用程序。
访问调用 SAP-RFC 功能模块 - 2009 年 9 月 23 日 - https://answers.sap.com/questions/6537228/access-calls-sap-rfc-function-modules.html 这是关于注册 DLL 和 OCX
https://docs.oracle.com/cd/E28280_01/doc.1111/e16597/app_librfc.htm#SAPBW222
https://pocketprograms.com/kb/when-i-connect-to-sap-i-get-the-error-librc32-dll-not-found/
https://www.google.com/search?source=hp&ei=83KQX6iiAoXYsAW5-p64DQ&q=librfc32.dll&oq=librfc32.dll&gs_lcp=CgZwc3ktYWIQAzIFCAAQyQMyAggAMgIIADICCAAyBAgAEB4yBAgAEB4yBAgAEB4yBAgAEB4yBAgAEB4yBAgAEB46DgguELEDEMcBEKMCEJMCOgUIABCxAzoICC4QxwEQowI6BQguELEDOgsILhCxAxDHARCjAjoICC4QsQMQgwE6AgguOggIABCxAxDJAzoFCAAQkgM6CAgAELEDEIMBOgQIABAKOgoIABCxAxDJAxAKOgcIABCxAxAKOgoIABCxAxCDARAKUE1Y5Bxgih9oAHAAeACAAbYBiAGCCJIBBDExLjGYAQCgAQGqAQdnd3Mtd2l6&sclient=psy- ab&ved=0ahUKEwjo5_PvncbsAhUFLKwKHTm9B9cQ4dUDCAg&uact=5
Sap 登录控制 - SAP 问答 - https://answers.sap.com/questions/13152769/sap-logon-control-2.html
https://answers.sap.com/questions/913490/librfc32dll.html?childToView=915447#comment-915447
在尝试了许多变通方法并查看了 50 多个网页后,我在 StackOveflow 上发布了帖子。我想在这个问题中包含一些更接近这个问题的链接,但由于链接错误太多而受到限制。
解决方案
librfc32.dll 是经典的 RFC 库,也是经典 RFC SDK 的一部分。它还随以前的 SAP GUI 版本和其他产品一起提供。但与此同时,经典的 RFC 库和经典的 RFC SDK 在 SAP 已经停止维护和支持。您将不再获得此库的新版本或更新。
此库需要哪些 Visual C 运行时库取决于 librfc32.dll 源自的 SAP 版本和库的位宽(32 位与 64 位)。请注意,对于所有动态加载的库,您始终需要相同的位宽,这些库必须适合加载这些库的主程序的位宽。因此,请检查您的 MS Access 可执行文件是 32 位还是 64 位程序。
尽管它的名字是 librfc32.dll,但它作为 32 位库和 64 位库存在。在 Windows 目录 SysWOW64 中,您通常会找到 32 位库,而在 64 位 Windows 安装的目录 system32 中,您会找到 64 位库 [感谢 Microsoft 的命名约定]。:)
无论如何,您不需要 librfc32u.dll,它是该库的 Unicode 版本。您不能在一个过程中同时使用两者。您的代码是针对 Unicode 编译的,或者不是,并且由于您尝试加载 librfc32.dll,它似乎是针对非 Unicode 运行时编译的。
推荐阅读
- c++ - 使用 dtostrf 将多个浮点值转换为字符串
- scala - 使用 mapGroupsWithState 进行 Spark 流式处理
- macos - 找不到符号 libboost_regex-mt.dylib
- html - 当画外音打开时,html 日期和时间选择器不会在 ios 浏览器中打开
- c# - Xamrin.Forms 尝试使用 Firebase 实时数据库创建电子邮件检查
- aws-lambda - 使用 cloudformation 堆栈将 SNS 触发器添加到特定的 lambda 版本
- matlab - MATLAB:将实验数据拟合到 ODE 模型,并执行优化(动力学建模)
- node.js - SQL Server 允许为 NTLM 身份验证提供不正确的域名
- typescript - 如何根据不同的参数创建导出的函数别名以进行类型检查
- javascript - 向php发送一个html表格