获取WScript引擎调用函数的DLL信息及LibreOffice Basic LenB问题解决
解决方案
一、获取WScript引擎执行VBScript依赖的DLL库信息
- 使用
dumpbin工具(需安装Visual Studio Build Tools或Windows SDK):- 打开管理员权限的命令提示符,定位到
C:\Windows\System32(WScript.exe默认路径) - 执行命令:
dumpbin /dependents wscript.exe,输出结果将列出所有依赖的DLL文件。
- 打开管理员权限的命令提示符,定位到
- 使用Process Explorer工具:
- 先运行任意VBS脚本启动
wscript.exe进程,再打开Process Explorer - 找到该进程,右键选择「属性」→「依赖项」标签,即可查看所有关联DLL。
- 先运行任意VBS脚本启动
二、解决LibreOffice Basic操作Access数据库的LenB及ADOX问题
1. 替代无效的LenB函数
LibreOffice Basic自带LenB行为与VBA不符,可自定义等价函数:
Function VBA_LenB(ByVal str As String) As Long ' 模拟VBA LenB:返回UTF-16编码下的字符串字节数 VBA_LenB = Len(str) * 2 End Function
若处理字节数组,直接用UBound(byteArr) - LBound(byteArr) + 1获取字节长度。
2. 规避__VarLenB调用的LongPtr限制
LibreOffice Basic无LongPtr类型,无法适配64位ACEDAO.DLL的__VarLenB调用要求,直接放弃该方式,改用上述自定义VBA_LenB或通过DAO对象原生属性/方法间接获取长度信息。
3. 64位ACE下创建ADOX对象的修复
仅保留64位AccessDatabaseEngine 2016,确保LibreOffice以64位模式运行(Windows11默认安装的LibreOffice多为64位),使用ProgID创建ADOX对象:
Dim cat As Object Set cat = CreateObject("ADOX.Catalog") ' 示例:连接Access数据库 cat.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\example.accdb;"
若仍失败,检查:
- 通过注册表确认
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine路径存在 - 以管理员身份运行LibreOffice
- 修复ACE安装:控制面板→程序和功能→找到Microsoft Access Database Engine 2016→更改→修复
4. 避免32/64位组件冲突
严禁同时安装32位和64位ACE,会导致COM组件注册混乱,坚持64位ACE+64位LibreOffice的组合即可解决多数兼容性问题。
内容的提问来源于stack exchange,提问作者Pertsa
相关产品推荐
相关产品推荐

