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

来源:互联网 发布:axure rp mac 编辑:程序博客网 时间:2024/06/14 04:50
问题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/
终于把载入的问题全搞定了
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 热车1200怠速降不下来怎么办 大腿根骨髓水肿越来越疼怎么办 倒库方向打晚了怎么办 签吻芳颜祛斑液脸脱皮怎么办 3d右边工具栏消失了怎么办 3d菜单栏消失了怎么办 觉得自己性无能不敢谈对象怎么办 护士面试时被问到病人坠床怎么办 三次元仪器坏了怎么办 运动同手同脚怎么办 狗狗突然害怕不敢走路怎么办 一岁半宝宝因为害怕不敢走路怎么办 猫把背拱起来怎么办 穿猫跟鞋走路不稳怎么办 狗狗后腿内八字怎么办 快走后小腿粗了怎么办? 猫的嘴巴烂了怎么办 苹果8丢了已关机怎么办 肚子吃多了难受怎么办 喝水喝的肚子胀怎么办 肚子吃撑了难受怎么办 肚子撑得想吐怎么办 吃饭吃的太饱怎么办 吃饭吃的太撑怎么办 跑步迈不开步子怎么办 踏步走步子反了怎么办 微信不支持计步怎么办 肝癌二次介入后头晕心慌怎么办 跑步跑得胃疼怎么办 如果世界上的猪都死了怎么办 我和我老婆吵架怎么办 我和我老婆吵架了怎么办 智障人士父母死后怎么办 依赖性太强的人怎么办 高考只有一门写准考证号怎么办 ps做动画不流畅怎么办 ff15引擎剑卖了怎么办 fgo从者满了怎么办 游泳池的水喝了怎么办 月球没有水怎么办秒懂 请了新财神旧的怎么办