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);
これは、C\tempに保存されているLuaスクリプトです。
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スクリプトが機能します。最初の本のIDである10を返します。
また、前述のように、スクリプトに「require」がない限り、C#からLua関数を呼び出すことができました。このタイプの例外をスローするのはLuaXMLだけではありません。どんなパッケージでもそうです。
私は環境変数で遊んだことがありますが、成功しませんでした。しかし、私はそれがあまり得意ではありません。
よろしくお願いします。