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, , ); //两个参数一个返回值
  sum = (int)lua_tointeger(L, -); //从栈顶取得返回值
  lua_pop(L, );
  return sum;
} int main()
{
  L = luaL_newstate();
  luaL_openlibs(L);
  luaL_dofile(L, "D:\\Work\\Lua\\CcallLua\\sum.lua");
  int sum = ladd(, );
  cout << "sum=" << sum << endl;
  lua_close(L);
  system("pause");
  return ;
}

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

<.cpp文件>

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

static int add2(lua_State* L)
{
  double op1 = luaL_checknumber(L,);//检查某个参数是否为一个数字
  double op2 = luaL_checknumber(L,);
  //将函数的结果压入栈中。如果有多个返回值,可以在这里多次压入栈中。
  lua_pushnumber(L,op1 + op2);
  return ;
} //待Lua调用的C注册函数。
static int sub2(lua_State* L)
{
  double op1 = luaL_checknumber(L,);
  double op2 = luaL_checknumber(L,);
  lua_pushnumber(L,op1 - op2);
  return ;
} //待Lua调用的C注册函数。
static int l_sin (lua_State *L)
{
  double d = lua_tonumber(L, );
  lua_pushnumber(L, sin(d));
  return ;
} 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 ;
}

<.lua文件>

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

最新文章

  1. python 高级之面向对象初级
  2. Android中ListView动态加载数据
  3. phonegap + xcode5.0.2 配置开发环境
  4. 利用cubieboard设置samba打印服务器
  5. [Java] 01 String 内存分析
  6. Uva12504 Updating a Dictonary
  7. [Node.js] Node.js Buffers
  8. 谋哥:研究App排行榜浮出的神器
  9. Effective Objective-C 读书笔记
  10. 小测试 php代理,nginx代理,直接访问对比
  11. ODBC、OLE DB、 ADO、ODAC、ODP.NET
  12. 《转》 Openstack Grizzly 指定 compute node 创建 instance
  13. 关于MD5+salt盐加密
  14. Linux 内存管理之highmem简介
  15. MyBatis深入浅出--入门
  16. JAVA-Proxy 代理
  17. &lt;转载&gt;bellman-ford算法
  18. scrapy (四)基本配置
  19. Spark记录-Scala异常处理与文件I/O
  20. k8s实战之Service

热门文章

  1. python 在一个excel存多个sheet
  2. Eclipse 使用 VS Emulator for android 调试环境配置 步骤
  3. openstack--9--深入理解虚拟机
  4. 用jquery得到select选中的值
  5. Spring Cloud(Dalston.SR5)--Zuul 网关-路由配置
  6. JAVA常用工具类异常处理
  7. zip()函数,max()和min(),built-in function,import模块,read(),readlines(),write(),writelines(),with..as..文件处理方式
  8. ftp 和vsftp
  9. 反序列化和序列化xml使用反射处理节点的属性
  10. Getting started - RN1