VScode下LUA调用CAPI问题
最近在学习LUA,看到云风大大很多年前的一个lua调用windowsAPI的代码,于是想拿来运行一下,等运行了再仔细看代码,然而这一调就是几个小时。
开始的尝试
一开始想着直接复制粘贴就完事了,后来发现DLL竟然导出失败,提示未找到的XXX文件,原来是没有配置对项目,不仅仅要区分DEBIG/RELEASE,还要设置对应的平台(x86=32bit,x64=64bit)
导出dll后让LUA require(“windows”)发现lua报错(我用的是VSCode里面的插件LUA)
报错内容:“error loading module”
然后仔细查找了require的命名规则,以及lua的c连接器的package.cpath,以及函数的命名规则 luaopen_XXX,发现都没有问题,这个时候我觉得可能是vscode的插件的解释器的版本和我自己编译时使用的LIB静态库版本不同 ,所以我就用同一个LUA静态库来执行(用c来调用脚本然后脚本调用我写的dll)这样的话环境肯定是一致的
ps:(lua有2中调用dll的方法:1,require,设置cpath,2,用package.loadlib)
我的dll库文件:
static const luaL_Reg libs[]{ { "OpenDll",open_dll }, { "GetProAddress",get_procaddress }, { NULL,NULL } }; extern "C" __declspec(dllexport) int luaopen_windows(lua_State *L) { luaL_newlib(L, libs);//会将所有函数放入一个表,并将这个表压倒栈上 return 1; }
我在c中调用LUA脚本然后在脚本里面执行require继续报错
我觉得dll都是找到了的,于是我想看看函数有没有被访问到于是改动代码
extern "C" __declspec(dllexport) int luaopen_windows(lua_State *L) { printf("call luaopen_windows\n"); return 0; }
结果,没有报错成功执行
然后再将luaL_newlib(L, libs)加回去,发现函数报错
也就是说我这个函数用错了?!所以我得换种办法加载所有的库于是我尝试自己写一个类似的库运行成功!!值得一提的是luaL_newlib()我在其他的时候用的都没有问题只有在导出dll的时候有问题,等以后看源码的时候希望能找到答案吧!
最后放到VScode里面运行依然报错,才发现是版本问题,我编译的DLL是32位的而它默认的是64位!!所以说 !! 版本!! 很重要!!!
- 点赞
- 收藏
- 分享
- 文章举报
- vs2013版本中 App_Code文件夹下类的调用问题
- 【CODEVS2602】最短路径问题
- App_Code文件夹下类的调用问题
- 【codevs1906】[网络流24题]最长递增子序列问题
- [CODEVS1216]跳马问题
- vscode无法调试python问题
- codevs2606 约数和问题
- c语言与lua交互(capi)介绍, lua调用C语言函数详解(一)
- Codevs 1231 最优布线问题
- 如何在VS Code里,让一个cpp文件调用另一个cpp文件
- VS2013中C++简单调用Lua
- ProgressDialog调用dismiss()不消失、null是什么(dead code问题)
- Quick-Cocos2d-x lua 调用java 在谷歌手机5.0 以上出现的问题处理方式
- 对Atom 1.9 及 VSCODE 1.3+不能拖拽打开文件或者文件夹问题【个人解决方案】
- 笔记34--ProgressDialog调用dismiss()不消失、null是什么(dead code问题)
- [网络流24题][CODEVS1916]负载平衡问题(费用流)
- codevs 1282 约瑟夫问题(线段树)
- vs code中Vue代码格式化的问题
- 信与信封问题(codevs 1222)
- 关于vscode更新后 格式化代码造成函数括号后的空格被删除,单引号变双引号问题的解决方法