VS2019的动态库dll在lua中调用及lua.exe和luac.exe的使用方法
因为懒得写,所以源码是在这里拷贝过来的,
lua调用dll demo - ff_d - 博客园
这里讲一下配置开发的过程。
上一讲提到了VS2019编译开发lua了,在编译好了之后,我们在这里使用一下。
首先新建一个dll工程,名字随便取,注意和后面的调用保持一致就OK了,我这里就叫“test_luaDll1”,源码内容如下,
//#include "pch.h"
//#include "msg.h"//生成的dll 是 lua_add53.dll
//luaopen_lua_add
extern "C" {
#include "E:/wLua/luaVsProject/luaVsStaticLib/src/lua.h"
#include "E:/wLua/luaVsProject/luaVsStaticLib/src/lualib.h"
#include "E:/wLua/luaVsProject/luaVsStaticLib/src/lauxlib.h"
};#pragma comment(lib, "E:/wLua/luaVsProject/x64/Debug/luaVsDll.lib")#include <iostream>
using namespace std;extern "C" int ShowMsg(lua_State * luaEnv) {cout << "Hello world from clibs!" << endl;return 0; // 返回值个数为0个.
}extern "C" int sub2(lua_State * L)
{double op1 = luaL_checknumber(L, 1);double op2 = luaL_checknumber(L, 2);int temp = op1 - op2;lua_pushnumber(L, temp);return 1;
}// part one: 要导出的函数列表
static luaL_Reg luaLibs[] = {{ "ShowMsg", ShowMsg},{ "sub2", sub2},{ NULL, NULL }
};// part two: DLL入口函数,Lua调用此DLL的入口函数.
extern "C" __declspec(dllexport)
int luaopen_test_luaDll1(lua_State * luaEnv) {//WinFeature是modole名, 将来require这个名字//lua_register(luaEnv, "ShowMsg", ShowMsg); //关键一行, 在luaState上注册好这个lib//lua_register(luaEnv, "sub2", sub2); //关键一行, 在luaState上注册好这个liblua_newtable(luaEnv);luaL_setfuncs(luaEnv, luaLibs, 0);return 1;
}
编译后会生一个叫test_luaDll1.dll的文件,把这个文件和下面这个test.lua放在一起,
local mytest = require "test_luaDll1"
mytest.ShowMsg();
print(mytest.sub2(1,2));
如何使用lua
然后,运行指令
lua test.lua
运行完了你会看到下面的输出
Hello world from clibs!
-1.0
如图,
如何使用luac
关于luac的介绍这里有,
LUAC man page
简单地说,这个和python的pyc文件非常类似,就是把.lua文件变成二进制文件,
E:\wLua\test_luaDll1\x64\Debug>luac test.luaE:\wLua\test_luaDll1\x64\Debug>dir
2022/04/17 19:58 <DIR> .
2022/04/17 19:58 <DIR> ..
2022/04/17 19:58 182 luac.out
2022/04/17 19:51 182 test.exe
2022/04/17 18:50 82 test.lua
2022/04/17 19:49 66,560 test_luaDll1.dll
2022/04/17 19:49 756 test_luaDll1.exp
2022/04/17 19:49 1,900 test_luaDll1.lib
2022/04/17 19:49 1,527,808 test_luaDll1.pdb7 个文件 1,597,470 字节3 个目录 801,822,638,080 可用字节E:\wLua\test_luaDll1\x64\Debug>lua luac.out
Hello world from clibs!
-1.0
从上面的运行结果可以看到,luac把test.lua变成了luac.out,这个是二进制格式的,然后通过lua.exe照样可以调用。当然,如果你希望生成的二进制文件名称有所不同,可以使用下面的指令、
luac -o myname.out test.lua、
然后,就可以这样调用了,
lua myname.out
本文结束。
VS2019的动态库dll在lua中调用及lua.exe和luac.exe的使用方法相关推荐
- BCB(C++ Builder)创建动态库(DLL,接口导出和调用),动态加载DLL
以前没有封装dll动态库,接触新的工作之后需要用,折腾了一整天,终于搞定了 毕竟是生手,就简单分析注意点和遇到的一些问题及解决方案: (1)首先准备要生成DLL的工程. (1.1)我用的是BCB(C+ ...
- C# VC6调用VC6的动态库DLL
C# VC6调用VC6的动态库DLL 一 VC创建动态库 1. DLL的创建 启动VC6.0, 新建一个"Win32 Dynamic-Link Library"工程,选择" ...
- 如何用C/C++生成一个为lua所用的动态库dll文件以及lua如何调用该dll(C语言的动态库)
如果读者朋友想详细的了解lua与C的通信原理,请移步这里[https://www.zhangshengrong.com/p/ERNnAzWa5W/]: 先说两句废话:怪不得lua不火,因为它对我们新手 ...
- C#.net调用动态库dll注意事项
C#.net调用动态库dll注意事项 本文主要描述作者在工作中所遇到技术难点及问题,最后提出相关的解决方案 场景 公司有个业务需求涉及到ID读卡器,构建成在ID卡读卡器一刷ID卡,系统就自动显示其ID ...
- c 调用c语言写的dll文件路径,手把手教你用C/C++语言创建及调试动态库DLL程序
引子 动态链接库DLL文件不仅可以实现代码.资源和数据的共享,同时也可以对源代码起保护作用,对于开发者来讲,DLL的生成及调试是程序员必须掌握的一种技术,下面通过一个具体的例子,演示使用C/C++语言 ...
- Visual Studio引入外部库 ---- 弄懂静态库lib和动态库dll
这两天由于想要研究一下socket的相关内容,但是没想到引入外部库还有这么多门道. 根据维基百科定义:一个现代编译器的主要工作流程如下:源代码(source code)→ 预处理器(preproces ...
- C#总结:C#调用C++的动态库Dll遇到的问题[动态库调用/结构体指针调用/union共同体定义]
记录使用C#调用C++的生成的DLL手柄键盘驱动库包括****.sys(驱动文件)和****.dll(库文件)的全部问题. C#调用C++的库有两种:静态调用和动态调用 静态调用,使用.net 提供的 ...
- java调用C或者C++动态库dll
java调用C或者C++动态库dll,本文章使用的是IntelliJ IDEA Community Edition 2021.2.3版本测试的 1.新建项目 linjie.demo,添加类HelloL ...
- C++将带ui界面的qt工程封装为动态库dll
C++将带ui界面的qt工程封装为动态库dll 功能如下 完整源代码实现如下 功能如下 将工程封装后可以在别的工程下直接引用该界面,以及该界面的函数, 完整源代码实现如下 #ifndef BUILD_ ...
- c++由动态库dll文件生成lib文件的方法
很多动态库dll文件,并没有附带lib文件,因此就无法以静态加载的方式去使用.但是此问题也是有解决办法的,就是从dll文件去生成一个lib文件.下面就介绍如何将dll文件去生成对应的lib文件 1.生 ...
最新文章
- R语言构建logistic回归模型并评估模型:计算混淆矩阵、并基于混淆矩阵计算Accuray、Precision、Recall(sensitivity)、F1、Specificity指标
- Grid SearchCV(网格搜索)与RandomizedSearchCV (随机搜索) 贴近实践的
- 华为合作oppovivo小米鸿蒙,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙...
- 编程方法学22:NameSurfer概述
- 044-PHP获得多个类对应的反射信息
- js 之for..in、表单及事件触发
- python-列表包字典-字典结构格式化-经验
- add p4 多个文件_绘图技巧01:继承特性创建对象之神器ADD
- Sqlite程序及库文件——整理(懒人)
- 线性回归相关系数c语言,线性回归中相关系数.doc
- 怎样才能提取图片中的文字
- ego电商项目:Rmi远程服务发布
- 下载 沙耶之歌Android_沙耶之歌安卓版
- 百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量-代码篇
- 初等数学I 自然数 第一节 基数理论
- python制作微信个人二维码怎么做_如何用Python制作微信的好友背景墙?
- 电饭锅一会儿通电一会儿不通电【检修原因】
- 电脑页面怎么没有计算机,如何找回电脑里消失的IE浏览器图标?
- 新年来到,特此制作一款烟花特效,预祝大家 虎虎生威,虎年大吉,生龙活虎
- 阿里云网站注销备案的办法
热门文章
- 沟通CTBS金融行业远程接入解决方案
- Java对象转Map的解决办法_java对象转map怎么操作?map如何转化成Java对象?
- IDEA 使用Tomcat热部署
- tomcat热部署(springboot项目)
- 云优CMS插件不需要云优CMS授权码的插件
- 建站系统创业项目综合测评:ePower、云优CMS、微加互联、微企点
- adb shell /system/bin/screencap screenrecord
- 系统架构设计师:分布式系统(中间件技术)
- “同心鼓”运动在理想状态下的最佳策略研究
- sql 查询结果随机排序