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

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

概述问题1:载入其他目录的lua脚本,并且其中引用了和lua脚本放在同目录中的dll文件 比如Lua脚本中有这样一句 require("test")用来载入同目录下名为test.dll的库,直接运行这个Lua脚本是没问题的 但是在其他目录下的exe文件将此Lua脚本嵌入运行就会找不到test.dll了 因为当前运行的exe和dll没在同一个目录 而require("c:\\dir\\test")这样是 问题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/ 终于把载入的问题全搞定了 总结

以上是内存溢出为你收集整理的关于Lua脚本中跨路径引用以及多重跨路径引用的问题全部内容,希望文章能够帮你解决关于Lua脚本中跨路径引用以及多重跨路径引用的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1266829.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存