0
我有一個C#程序使用LuaInterface執行Lua腳本。到目前爲止,它運行良好,除非我的Lua腳本需要特定的包,比如LuaXML。如何從C#調用一個Lua腳本中有一個「require」的函數?
我想從C#發送一個XML字符串到一個Lua函數。
這是XML,保存在C:\ TEMP:
<?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引發這種異常。任何包都可以。
我玩過環境變量,但沒有成功。不過,我並不擅長這一點。
非常感謝您的幫助。
謝謝米哈爾,但我到目前爲止嘗試不起作用。 – 2012-02-20 03:16:53
既沒有LuaXMl.luac文件(後綴爲c),也沒有LuaXML.dll(只有LuaXML_lib.dll)。但是,我必須將腳本直接使用require(「LuaXML」)(而不是C#)。我無權訪問Microsoft Shared文件夾。它告訴我,我必須是一個管理員(我是一個,順便說一句)。我已經在許多地方嘗試了package.cpath:從控制檯或腳本中。它也不起作用。我相信這很簡單,我可能錯過了一些東西。如果您有任何其他可以提供幫助的說明,請事先致謝。 – 2012-02-20 03:34:15