您的位置:首页 > 编程语言 > Lua

关于Lua脚本中跨路径引用以及多重跨路径引用的问题

2012-04-24 16:39 399 查看
问题1:载入其他目录的lua脚本,并且其中引用了和lua脚本放在同目录中的dll文件
比如Lua脚本中有这样一句
require("test")用来载入同目录下名为test.dll的库,直接运行这个Lua脚本是没问题的
但是在其他目录下的exe文件将此Lua脚本嵌入运行就会找不到test.dll了
因为当前运行的exe和dll没在同一个目录
而require("c:\\dir\\test")这样是行不通的,require的参数只能是包名,而不能有路径
得通过设置路径package.cpath来实现,注意这里是package.cpath而不是package.path
package.cpath是用来设置后缀为dll的路径
而package.path是用来设置后缀为lua的路径
请根据自己的情况来决定
package.cpath的格式是用分号隔开各路径,并用问号做通配,例如:.\?.dll;.\?51.dll;
把我们自己的路径加进去
package.cpath = package.cpath..";"..myWorkPath.."\\?.dll"
然后在使用require语句就能正常引用了

问题2:接上面问题的情况,解决后发现另一个问题,刚刚引用的dll中调用了另外一个dll,引用失败
很明显问题还是类似,要加载的dll和exe没有在同一目录
这里需要把dll目录添加到加载路径中
找到一篇文章详细介绍这种情况:http://blog.csdn.net/zhufangyou/article/details/6423751
里面有一个MSDN的链接的详细说明,提到了SetDllDirectory这个函数,可惜只支持Win8
而里面提供的几个方法:
SetDllDirectory,据说不同版本的Windows有兼容问题
SetCurrentDirectory,脚本运行时间很长,担心对其他模块有影响
最后一个是把载入dll的方式改为LoadLibraryEx("DLL绝对路径", NULL,
LOAD_WITH_ALTERED_SEARCH_PATH);
通过指定LOAD_WITH_ALTERED_SEARCH_PATH,让系统DLL搜索顺序从DLL所在目录开始。
但是难道去改Lua内部逻辑?是的,正好找到云风的一篇博客提到修改Lua载入dll的路径问题的
http://blog.codingnow.com/2006/12/loadlibrary_search_order.html
里面有提到修改位置,再根据这片博客的编译方法:
http://dipplum.com/2009/11/09/visualc-compile-lua/
终于把载入的问题全搞定了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐