加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 22:20:14 所属栏目:大数据 来源:网络整理
导读:问题1:载入其他目录的lua脚本,并且其中引用了和lua脚本放在同目录中的dll文件 比如Lua脚本中有这样一句 require("test")用来载入同目录下名为test.dll的库,直接运行这个Lua脚本是没问题的 但是在其他目录下的exe文件将此Lua脚本嵌入运行就会找不到test.dl
问题1:载入其他目录的lua脚本,并且其中引用了和lua脚本放在同目录中的dll文件
比如Lua脚本中有这样一句
require("test")用来载入同目录下名为test.dll的库,直接运行这个Lua脚本是没问题的
但是在其他目录下的exe文件将此Lua脚本嵌入运行就会找不到test.dll了
因为当前运行的exe和dll没在同一个目录
而require("c:dirtest")这样是行不通的,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/
终于把载入的问题全搞定了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读