我有一个使用 LuaInterface 执行 Lua 脚本的 C# 程序。到目前为止,它运行良好,除非我的 Lua 脚本需要特定的包,如 LuaXML。
我想将 XML 字符串从 C# 发送到 Lua 函数。
这是保存在 C:\temp 中的 XML:
<?xml version="1.0" encoding="utf-16" ?>
<library id="101">
<book id="10" author="Balzac" title="Le Père Goriot"></book>
<book id="20" quantity="Stendhal" price="Le Rouge et le noir"></book>
</library>
这是 C# 代码:
Lua lua = new Lua();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(@"C:\temp\library.xml");
lua.DoFile(@"C:\temp\myScript.lua");
LuaFunction luaFunction = lua.GetFunction("transformXML");
Object o = luaFunction.Call(xmlDocument.OuterXml);
这是 Lua 脚本,保存在 C\temp 上:
require("LuaXML")
function transformXML(input)
x = xml.eval(input)
output = nil
local library = x:find("library")
return library[1].id
end
local s = '<?xml version="1.0" encoding="utf-16" ?><library id="101"><book id="10" author="Balzac" title="Le Père Goriot"></book><book id="20" quantity="Stendhal" price="Le Rouge et le noir"></book></library>'
print(transformXML(s))
这是我得到的错误:
C:\temp\myScript.lua:1: module 'LuaXML' not found:
no field package.preload['LuaXML']
no file '.\LuaXML.lua'
no file 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\lua\LuaXML.lua'
no file 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\lua\LuaXML\init.lua'
no file 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\LuaXML.lua'
no file 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\LuaXML\init.lua'
no file 'C:\Program Files (x86)\Lua\5.1\lua\LuaXML.luac'
no file '.\LuaXML.dll'
no file 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\LuaXML.dll'
no file 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\loadall.dll'
我是否必须将所有这些文件(.lua、.dll)手动放到所有这些位置?
当我从 Lua 控制台执行 Lua 脚本时,它可以工作。它返回 10,即第一本书的id。
此外,如前所述,只要脚本中没有“require”,我就可以从 C# 调用 Lua 函数。引发这种异常的不仅是 LuaXML。任何包裹都可以。
我玩过环境变量,但没有成功。但是,我不是很擅长。
预先感谢您的帮助。