如何从C#中调用一个Lua函数,该函数存在于一个具有“require”的Lua脚本中?
2012-2-19 19:45:21
收藏:0
阅读:113
评论:1
我有一个使用LuaInterface执行Lua脚本的C#程序。到目前为止,它工作良好,除非我的Lua脚本需要特定的软件包,如LuaXML。
我想从C#向Lua函数发送XML字符串。
这是保存在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:找不到模块“LuaXML”:
无字段包。预加载['LuaXML']
没有文件'。\ LuaXML.lua'
没有文件'C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ lua \ LuaXML.lua'
没有文件'C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ lua \ LuaXML \ init.lua'
没有文件'C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ LuaXML.lua'
没有文件'C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ LuaXML \ init.lua'
没有文件'C:\ Program Files(x86)\ Lua \ 5.1 \ lua \ LuaXML.luac'
没有文件'。\ LuaXML.dll'
没有文件'C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ LuaXML.dll'
没有文件'C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ loadall.dll'
我必须手动将所有这些文件(.lua、.dll)放到所有这些位置吗?
当我从Lua控制台执行Lua脚本时,它可以正常工作。它返回第一本书的_id_10。
另外,如上所述,只要脚本中没有'require',我就可以从C#调用Lua函数。不仅是LuaXML会抛出这种类型的异常,任何软件包都会这样。
我尝试过操作系统环境变量,但没有成功。但是,我不是很擅长这方面。
提前感谢您的帮助。
原文链接 https://stackoverflow.com/questions/9351948
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你必须把 LuaXML 共享库放到其中一个位置(参见输出,特别是找 DLL 的最后几行),这样 Lua 的
require
才能找到它。或者,你可以改变package.cpath
来指向你保存 LuaXML DLL 的位置。示例:package.cpath = package.cpath .. ";./libs/?.dll"