关于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/
终于把载入的问题全搞定了
比如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脚本中跨路径引用以及多重跨路径引用的问题
- 【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed以及路径等问题
- 【JSP】关于jsp文件存放以及引用的路径问题
- 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!
- 关于函数传参,传引用 以及编译器的优化问题
- php学习(三)关于身份验证、以及require路径问题
- JS中关于JS文件的引用以及问题
- 关于vue.js发布后路径引用的问题解决
- 关于winodows下编程c++遇到的引用文件路径问题
- javaweb中关于引用css和image的路径问题
- 关于HTMl中引用IMG路径的问题
- vs2008中使用母版页关于引用*.js的[智能语法提示]和[设置路径]的方法和问题
- lua 脚本 string.find 查找关于 ( ) 的问题
- 添加文件【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed、Cocos2dxActivity cannot be 路径等问题
- 关于std::fstream以及std::ifstream打开中文路径名失败的问题和解决方法
- 网站中多个页面同时引用一个head和foot页面遇到的css样式时有时无的问题——关于路径问题
- 关于winodows下编程c++遇到的引用文件路径问题
- lua 脚本 string.find 查找关于 ( ) 的问题
- 关于SpringMVC4使用过程中的路径问题,我们经常遇到的Controller未执行以及执行了之后出现404
- 将C语言编译成DLL并用C#进行调用以及关于从C#传输中文路径到C的DLL中打开文件的问题