Lua com luacom require
- ZeroBrane Studio加载模块错误,给出的提示信息显示异常
尝试用CMD直接lua -e require"xxx",得到找不到指定的模块。
require前可指定package.cpath,免得使用了系统环境,但上述提示信息可确认文件路径。
其后该加上如print'done',验证运行完毕,而非卡死退出(如lua53 require lua51的库)最终luaXX -e "package.cpath='?.dll' require'XX' print'done'"。
此问题是加载模块时发生——error loading module、stack traceback,不同于未找到模块module "xxx" not found(栈要少一级),不同于Lua版本问题(也提示module "xxx" not found)
可能是运行库依赖的问题?另见:C# 调用lua 报错未能加载文件或程序集“lua51.dll”或它的某一个依赖项。找不到指定的模块。 解决方法 - 飞翔的小菜鸟 - 博客园 (cnblogs.com)(LuaInterface has some dependencies on the VisualC++ runtime library.)
如果是x86、x64架构问题,会显示%1 不是有效的 Win32 应用程序。 -
以上异常尝试用Procmon(进程监视器 - Windows Sysinternals | Microsoft Docs)定位下。
看来是缺少MSVCR80.DLL。
- 各个版本Microsoft Visual C++运行库 - devilan - 博客园 (cnblogs.com)、各个版本Microsoft Visual C++运行库下载_慕容雪_的博客-CSDN博客_c++运行库
- 续上,MSVCR80属于Microsoft Visual C++ 2005,但添加删除中显示已有..
但 Everything确实没在以上路径中找到此文件,其他类似文件MSVCR100.dll正常。
是之前没安装对?尝试删除重装。>无果,添加删除里没有装上,文件也没找到。尝试重启。>添加删除中找到但路径上仍仅存在于,这是没有确定架构而被部署应用?>VCR正常的,见后。对照其他C:\Windows\SysWOW64\msvcr100.dll
尝试手动(复制粘贴)引用 。
- 尝试将"C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.9659_none_d08cfd96442b25cc\msvcr80.dll"复制到bin路径下,运行报错
Runtime Error!
Program: C:\ProgramFiles\ZeroBraneStudio\bin\lua53.exe
R6034
An application has made an attempt to load the C runtime library incorrectly.
Please contact the application's support team for more information.解释器也报错动态链接库(DLL)初始化例程失败。
尝试了所有x86版本都如此..
含:Download Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC 安全更新 from Official Microsoft Download Center - 使用DirectX修复工具在线修复版_VBcom的博客-CSDN博客_directx在线修复(DirectX,Direct X )
- redistribute=SP1?
- 重新编译使用高版本VCR库的LUACOM?>使用如上DirectX在线修复工具。
- lua -e 模式下注意空格,否则报错syntax error near <eof>。
-
从rjpcomputing/luaforwindows: Lua for Windows (github.com)(Lua 5.1版本)更新(时间也不新)了luacom.dll,正常了。
用的仍是msvcr80.dll,不过能正确地找到地址了。
重新对比下原版失败的luacom - 用lua5.3打开luacom 5.1不报错,但在require处卡住/不返回。
-
require的库名称可能和路径名称不同、无关。如对文件luacom53.dll,需require'luacom'(而非require'luacom53'),库名称与文件名称的映射由package.cpath='?53.dll'完成。
否则可能报错找不到指定的程序。(如require'luacom53'找不到luacom入口)