0

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だけではありません。どんなパッケージでもそうです。

私は環境変数で遊んだことがありますが、成功しませんでした。しかし、私はそれがあまり得意ではありません。

よろしくお願いします。

4

1 に答える 1

1

LuaXML共有ライブラリをこれらの場所の1つに配置する必要があります(出力、特にDLLを探す最後の行を参照)。これにより、Luarequireはそれを見つけることができます。package.cpathまたは、 LuaXML DLL が保存されている場所に変更することもできます。例:

package.cpath = package.cpath .. ";./libs/?.dll"
于 2012-02-19T21:38:50.660 に答える