美文网首页游戏设计&游戏开发Lua程序员
三分钟学会用Lua调用C/C++函数库

三分钟学会用Lua调用C/C++函数库

作者: 陈码工 | 来源:发表于2017-07-24 21:36 被阅读838次

跟着本文, 大家只需要简单的4个步骤就能build出自己的C/CPP语言DLL库供Lua require随意调用.

需要准备的软件

step1: 建DLL工程

使用VisualStudio2017, 新建一个Win32 Console Application

1 2

step2: 拷lua5.1代码

创建成功后, 从Lua5.1 source file(百度搜索lua5.1 source file下载)中, 拷贝所有的源代码.c和.h文件到项目文件夹中. 我们其实有更简洁的引用lua.lib而不是直接拷贝源代码的方式, 但是新手入门先用这个方法不容易出错.

3

拷贝完文件后, 要在Visual Studio IDE中右键项目名 --> 添加 --> 现有项目, 选中所有刚才复制的lua5.1源代码.

step3: 写DllMain.cpp代码

新建DllMain.cpp文件, 写上如下的代码. 代码很简短, 而且写好了注释供大家参考.

extern "C" {
#include "lua.h"  
#include "lualib.h"  
#include "lauxlib.h"
};
#include <iostream>  
using namespace std;

extern "C" int ShowMsg(lua_State* luaEnv) { 
    cout << "Hello world from clibs!" << endl;
    return 0; // 返回值个数为0个.  
}

// part one: 要导出的函数列表
static luaL_Reg luaLibs[] = {
    { "ShowMsg", ShowMsg},
    { NULL, NULL }
};

// part two: DLL入口函数,Lua调用此DLL的入口函数.  
extern "C" __declspec(dllexport)
int luaopen_WinFeature(lua_State* luaEnv) {   //WinFeature是modole名, 将来require这个名字
    const char* const LIBRARY_NAME = "WinFeature"; //这里也写WinFeature
    luaL_register(luaEnv, LIBRARY_NAME, luaLibs);  //关键一行, 在luaState上注册好这个lib
    return 1;
}

step4: build出dll库

点击build --> build solution (ctrl + shift + B)生成出xxx.dll库文件.
在项目的Debug文件夹中取出所需的dll库.

debug文件夹中取出xxx.dll文件

再把这个xxx.dll库复制到C:\Program Files (x86)\Lua\5.1\clibs文件夹下即可. (这里路径名仅供参考, 要以大家的实际lua路径为准)

extra: 测试是否成功

require "WinFeature"
WinFeature.ShowMsg() -- it should prints "Hello world from clibs!"
cmd结果

显然, 我们成功了!!!

参考资料&扩展阅读

绑定Lua和C/C++的库
What does “#pragma comment” mean?

相关文章

  • C++调用lua方式

    目标 使用C++调用lua接口 示例 lua代码(test.lua) C++调用示例(lua_test.cpp) ...

  • Lua绑定流程

    绑定是为了实现将C++代码注册到lua环境,使得lua可以调用C++函数。https://blog.csdn.ne...

  • NDK开发中C与C++互相调用处理

    在NDK开发中难免会遇到C与C++混合编程,比如C调用C++写的so库或者C++调用C的函数库,如果不做特别处理...

  • 对Lua ,C,C#互相调用的理解

    几种情况讨论 C调用Lua C调用C# C#调用C C#调用Lua Lua调用C Lua调用C# Lua调用C 本...

  • 三、Lua调用C++函数

    上一篇文章中我们已经知道了,C++怎么调用Lua中的函数,接下来我们学习一下,Lua怎么调用C++中的函数。 这篇...

  • lua调用c++中的函数(使用LuaBridge)

    前面一节简述描写了如何在c++中调用lua函数,这节简述描写如何在lua中调用c++中的函数,还是使用前一节的工程...

  • Lua api(一)

    前言# 最近看了一下Lua与C++的交互,发现只是写lua而不了解lua与C++相互调用的过程,确实是一件苦恼的事...

  • 三分钟学会用Lua调用C/C++函数库

    跟着本文, 大家只需要简单的4个步骤就能build出自己的C/CPP语言DLL库供Lua require随意调用....

  • Lua前世今生、优势、应用场景

    Abstract:C\C++ + Lua = 性能 + 动态性(灵活) = 灵活的C/C++。 Lua前世今生、优...

  • lua和c的初始

    lua和c的交互包括:c访问lua的变量、c访问lua的table、c调用lua的方法、lua调用c的函数 参考链...

网友评论

  • fcfe30bb35e0:报错:luaL_register 标识符未定义
    lauxlib.h也引入了
    陈码工:@Super洛伽 你给我邮箱。我发给你我的工程
    fcfe30bb35e0: @CarbonCheney 加了
    陈码工:@Super洛伽 拷贝文件到项目目录下了吗?右键添加了吗?

本文标题:三分钟学会用Lua调用C/C++函数库

本文链接:https://www.haomeiwen.com/subject/iagbkxtx.html