加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua 和 C++ 交互

发布时间:2020-12-14 21:50:08 所属栏目:大数据 来源:网络整理
导读:step1、搭建好vs和lua相交互的环境: 1.下载一个lua5.3的源码; 2.有Lua_lib.lib这个文件; 3.开始配置: 鼠标放在工程名那: 右键选属性: ? 把包含目录点开进行编辑: ? 地址就选上面有源码的文件路径。 如上,把引用目录点开进行编辑地址是选lib文件的地

step1、搭建好vs和lua相交互的环境:

1.下载一个lua5.3的源码;

2.有Lua_lib.lib这个文件;

3.开始配置:

鼠标放在工程名那:

右键选属性:

?

把包含目录点开进行编辑:

?

地址就选上面有源码的文件路径。

如上,把引用目录点开进行编辑地址是选lib文件的地址

如上,把库目录点开进行编辑地址也是lib文件的地址

step2、给这个工程添加头文件:

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};

这样前期准备工作就做好了。

?

(一)cpp文件中调用lua文件的函数:

<.lua文件>

function Add(a,b)
     return a+b;
end

<.cpp文件>

#include <iostream>
using namespace std;
#include"_lua.h"
static lua_State *L = NULL;
int ladd(int x,int y) 
{   
int sum;   lua_getglobal(L,"Add");   lua_pushinteger(L,x);   lua_pushinteger(L,y);   lua_call(L,2,1); //两个参数一个返回值   sum = (int)lua_tointeger(L,-1); //从栈顶取得返回值   lua_pop(L,1);   return sum; } int main()
{   L
= luaL_newstate();   luaL_openlibs(L);   luaL_dofile(L,"D:WorkLuaCcallLuasum.lua");   int sum = ladd(10,20);   cout << "sum=" << sum << endl;   lua_close(L);   system("pause");   return 0; }

?

(二)lua文件中调用cpp文件:

<.cpp文件>

//待Lua调用的C注册函数

static int add2(lua_State* L)
{
  double op1 = luaL_checknumber(L,1);//检查某个参数是否为一个数字
  double op2 = luaL_checknumber(L,2);
  //将函数的结果压入栈中。如果有多个返回值,可以在这里多次压入栈中。
  lua_pushnumber(L,op1 + op2);
  return 1;
}


//待Lua调用的C注册函数。
static int sub2(lua_State* L)
{
  double op1 = luaL_checknumber(L,1);
  double op2 = luaL_checknumber(L,2);
  lua_pushnumber(L,op1 - op2);
  return 1;
}


//待Lua调用的C注册函数。
static int l_sin (lua_State *L) 
{   
double d = lua_tonumber(L,1);   lua_pushnumber(L,sin(d));   return 1; } int main() {   lua_State *L = luaL_newstate();   luaL_openlibs(L);   //将指定的函数注册为Lua的全局函数变量,其中第一个字符串参数为Lua代码   //在调用C函数时使用的全局函数名,第二个参数为实际C函数的指针。   lua_register(L,"add2",add2);   lua_register(L,"sub2",sub2);   lua_register(L,"l_sin",l_sin);   //在注册完所有的C函数之后,即可在Lua的代码块中使用这些已经注册的C函数了。   luaL_dofile(L,"D:WorkLuaCcallLuasum.lua");   lua_close(L);   return 0; }

?

<.lua文件>

function show()
   print("--------------------")
   print(add2(1.0,2.0))
   print(sub2(20.1,19))
   print(l_sin(1))
end


show()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读