因为懒得写,所以源码是在这里拷贝过来的,

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的使用方法相关推荐

  1. BCB(C++ Builder)创建动态库(DLL,接口导出和调用),动态加载DLL

    以前没有封装dll动态库,接触新的工作之后需要用,折腾了一整天,终于搞定了 毕竟是生手,就简单分析注意点和遇到的一些问题及解决方案: (1)首先准备要生成DLL的工程. (1.1)我用的是BCB(C+ ...

  2. C# VC6调用VC6的动态库DLL

    C# VC6调用VC6的动态库DLL 一 VC创建动态库 1. DLL的创建 启动VC6.0, 新建一个"Win32 Dynamic-Link Library"工程,选择" ...

  3. 如何用C/C++生成一个为lua所用的动态库dll文件以及lua如何调用该dll(C语言的动态库)

    如果读者朋友想详细的了解lua与C的通信原理,请移步这里[https://www.zhangshengrong.com/p/ERNnAzWa5W/]: 先说两句废话:怪不得lua不火,因为它对我们新手 ...

  4. C#.net调用动态库dll注意事项

    C#.net调用动态库dll注意事项 本文主要描述作者在工作中所遇到技术难点及问题,最后提出相关的解决方案 场景 公司有个业务需求涉及到ID读卡器,构建成在ID卡读卡器一刷ID卡,系统就自动显示其ID ...

  5. c 调用c语言写的dll文件路径,手把手教你用C/C++语言创建及调试动态库DLL程序

    引子 动态链接库DLL文件不仅可以实现代码.资源和数据的共享,同时也可以对源代码起保护作用,对于开发者来讲,DLL的生成及调试是程序员必须掌握的一种技术,下面通过一个具体的例子,演示使用C/C++语言 ...

  6. Visual Studio引入外部库 ---- 弄懂静态库lib和动态库dll

    这两天由于想要研究一下socket的相关内容,但是没想到引入外部库还有这么多门道. 根据维基百科定义:一个现代编译器的主要工作流程如下:源代码(source code)→ 预处理器(preproces ...

  7. C#总结:C#调用C++的动态库Dll遇到的问题[动态库调用/结构体指针调用/union共同体定义]

    记录使用C#调用C++的生成的DLL手柄键盘驱动库包括****.sys(驱动文件)和****.dll(库文件)的全部问题. C#调用C++的库有两种:静态调用和动态调用 静态调用,使用.net 提供的 ...

  8. java调用C或者C++动态库dll

    java调用C或者C++动态库dll,本文章使用的是IntelliJ IDEA Community Edition 2021.2.3版本测试的 1.新建项目 linjie.demo,添加类HelloL ...

  9. C++将带ui界面的qt工程封装为动态库dll

    C++将带ui界面的qt工程封装为动态库dll 功能如下 完整源代码实现如下 功能如下 将工程封装后可以在别的工程下直接引用该界面,以及该界面的函数, 完整源代码实现如下 #ifndef BUILD_ ...

  10. c++由动态库dll文件生成lib文件的方法

    很多动态库dll文件,并没有附带lib文件,因此就无法以静态加载的方式去使用.但是此问题也是有解决办法的,就是从dll文件去生成一个lib文件.下面就介绍如何将dll文件去生成对应的lib文件 1.生 ...

最新文章

  1. R语言构建logistic回归模型并评估模型:计算混淆矩阵、并基于混淆矩阵计算Accuray、Precision、Recall(sensitivity)、F1、Specificity指标
  2. Grid SearchCV(网格搜索)与RandomizedSearchCV (随机搜索) 贴近实践的
  3. 华为合作oppovivo小米鸿蒙,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙...
  4. 编程方法学22:NameSurfer概述
  5. 044-PHP获得多个类对应的反射信息
  6. js 之for..in、表单及事件触发
  7. python-列表包字典-字典结构格式化-经验
  8. add p4 多个文件_绘图技巧01:继承特性创建对象之神器ADD
  9. Sqlite程序及库文件——整理(懒人)
  10. 线性回归相关系数c语言,线性回归中相关系数.doc
  11. 怎样才能提取图片中的文字
  12. ego电商项目:Rmi远程服务发布
  13. 下载 沙耶之歌Android_沙耶之歌安卓版
  14. 百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量-代码篇
  15. 初等数学I 自然数 第一节 基数理论
  16. python制作微信个人二维码怎么做_如何用Python制作微信的好友背景墙?
  17. 电饭锅一会儿通电一会儿不通电【检修原因】
  18. 电脑页面怎么没有计算机,如何找回电脑里消失的IE浏览器图标?
  19. 新年来到,特此制作一款烟花特效,预祝大家 虎虎生威,虎年大吉,生龙活虎
  20. 阿里云网站注销备案的办法

热门文章

  1. 沟通CTBS金融行业远程接入解决方案
  2. Java对象转Map的解决办法_java对象转map怎么操作?map如何转化成Java对象?
  3. IDEA 使用Tomcat热部署
  4. tomcat热部署(springboot项目)
  5. 云优CMS插件不需要云优CMS授权码的插件
  6. 建站系统创业项目综合测评:ePower、云优CMS、微加互联、微企点
  7. adb shell /system/bin/screencap screenrecord
  8. 系统架构设计师:分布式系统(中间件技术)
  9. “同心鼓”运动在理想状态下的最佳策略研究
  10. sql 查询结果随机排序