Lua和C++的交互
来源:互联网 发布:淘宝网显示不正常 编辑:程序博客网 时间:2024/06/06 19:10
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:\\Work\\Lua\\CcallLua\\sum.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:\\Work\\Lua\\CcallLua\\sum.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()
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- C和lua交互
- lua和C交互
- C/C++和Lua的交互
- Lua和C/C++的交互
- Lua和C语言的交互
- Lua和C之间的交互
- Lua和C之间的交互【转】
- 学习笔记-Java swing
- 机器学习LR模型,在面试中经常被问到的问题
- Fiddler域名重定向设置
- 【HDU 1029】Ignatius and the Princess IV (动态规划)
- 大规模时间序列数据自动异常检测架构
- Lua和C++的交互
- 就
- java内存模型详解(JMM)
- 2705: [SDOI2012]Longge的问题 欧拉函数
- AJAX学习
- 内存的管理艺术(基于C语言)2
- java服务1
- 位图的实现以及应用
- hdu6071神奇的最短路