• 编写Lua调用C/C++库的动态库文件


    编写Lua调用C/C++的接口

    环境:VS2017 commity 、Lua3.4

    在VS2017中创建一个空项目,项目MyUtil。

    鼠标右键项目,配置选“所有配置”,平台选“所有平台”。

    常规:

    输出目录:$(SolutionDir)..in$(Platform)$(Configuration)

    中检目录:$(SolutionDir)..intemp$(Platform)$(ProjectName)$(Configuration)

    项目默认值中,配置类型选“动态库(.dll)”

     我将下载好的lua源码和这个项目放在同一个目录下,luasrc是所有lua源码。

     在项目中,添加interface.cpp文件,文件中的代码。

     1 #include <windows.h>
     2 //使用 lua标准头文件
     3 #include "../luasrc/lua.hpp"
     4 
     5 //累计传入参数的和
     6 static int util_sums(lua_State *L) {
     7     int number = lua_gettop(L);//获取参数个数
     8 
     9     lua_Number sum = 0.0;//定义累计值
    10     for (int i = 1; i <= number; ++i) {
    11         if (!lua_isnumber(L, i)) {//第i参数
    12             lua_pushliteral(L, "参数有错");
    13             lua_error(L);//抛出异常
    14         }
    15         sum += lua_tonumber(L, i);//将第i个参数转换为浮点数,加到sum上
    16     }
    17     lua_pushnumber(L, sum);//将累计值压入栈
    18     lua_pushstring(L, "爱白菜的小昆虫");//再压个字符串进栈
    19     return 2;//返回值的个数
    20 }
    21 
    22 //定义注册表
    23 static const luaL_Reg util[] = {
    24     // lua使用的名字,这里的函数名字
    25     {"xqlSums", util_sums},
    26     {NULL, NULL}
    27 };
    28 
    29 //以C语言方式导出luaopen_MyUtil函数
    30 extern "C" __declspec(dllexport)
    31 int luaopen_MyUtil(lua_State *L) {//函数接口规则:luaoepn_编译的库名字
    32     luaL_newlib(L, util);//将函数名和函数注册
    33     return 1;
    34 }
    View Code

    鼠标右键项目,点击链接器->常规->附加库目录。

    $(SolutionDir)..in$(Platform)$(Configuration);%(AdditionalLibraryDirectories)

    点击链接器->输入->附加依赖项:luadll.lib(自己拿到lua源码编译的动态库,生成之后的lib文件。)

     

    将项目编译生成动态库文件。

    使用VS 2017的开发人员命令提示符,到生成的目录,使用

    dumpbin /exports MyUtil.dll 查看是否导出函数

     在库目录下,新建一个txt文件,修改名字为test.lua

     lua代码

    local obj = require("MyUtil")

    print(obj.xqlSums(1, 2, 3, 4, 5, 6))

    在命令行中,用lua解析器执行test.lua

  • 相关阅读:
    置换笔记
    7.23
    Conveyor Belts
    CF #134 A~D
    Blocks && Fixing the Great wall
    Kakuro
    Deadlock Detection
    关于KeyFile的破解,含注册机源代码
    BMP位图之代码实现
    BMP位图之8位位图(三)
  • 原文地址:https://www.cnblogs.com/xuqiulin/p/11874990.html
Copyright © 2020-2023  润新知