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()

Lua 和 C++ 交互的更多相关文章

  1. Lua和C++交互详细总结

    转自:http://cn.cocos2d-x.org/tutorial/show?id=1474 一.Lua堆栈 要理解Lua和C++交互,首先要理解Lua堆栈. 简单来说,Lua和C/C++语言通信 ...

  2. Lua与C++交互初探之Lua调用C++

    Lua与C++交互初探之Lua调用C++ 上一篇我们已经成功将Lua的运行环境搭建了起来,也成功在C++里调用了Lua函数.今天我来讲解一下如何在Lua里调用C++函数. Lua作为一个轻量级脚本语言 ...

  3. Lua 和 C 交互中虚拟栈的操作

    Lua 和 C 交互中虚拟栈的操作 /* int lua_pcall(lua_State *L, int nargs, int nresults, int msgh) * 以保护模式调用具有" ...

  4. 用好lua+unity,让性能飞起来——lua与c#交互篇

    前言 在看了uwa之前发布的<Unity项目常见Lua解决方案性能比较>,决定动手写一篇关于lua+unity方案的性能优化文. 整合lua是目前最强大的unity热更新方案,毕竟这是唯一 ...

  5. Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...

  6. Lua和C++交互 学习记录之八:C++类注册为Lua模块

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  7. Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  8. Lua和C++交互 学习记录之六:全局函数交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  9. Lua和C++交互 学习记录之五:全局数组交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  10. Lua和C++交互 学习记录之四:全局table交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

随机推荐

  1. 文笔很差系列1 - 也谈谈AlphaGo

    距离AlphaGo击败李世石已经过去数月了,心中的震撼至今犹在,全刊报道此项比赛的<围棋天地>杂志我已经看了不下十遍.总也想说点自己的意见,却也不知道从哪里说起,更不知道想表达些什么. 作 ...

  2. 测试那些事儿—postman进阶使用与实战

    1.postman进阶使用 1)环境与变量: 备注:全局 和 局部 变量不会影响到变量的调用,区别在于局部变量对于非当前环境不能使用而已. a.当测试存在多个环境时,可以先设置一个环境,然后在此环境下 ...

  3. 产生10个随机数5-9之间 统计一个int类型的一维数组中有多少个在[min,max]之间的数

    * 产生10个随机数5-9之间 统计一个int类型的一维数组中有多少个在[min,max]之间的数 */ import java.util.*; public class Demo{ public s ...

  4. java栈的实现复习

    栈是一种线性表,仅限在一端进行插入和删除操作,特点是先进后出. 由于栈是一种线性结构,首先可以想到用数组来实现,但由于数组初始化后容量就已经确定,如果不添加扩容操作,则会出现栈溢出,同时扩容操作也会降 ...

  5. JS 模拟 重载

    重载:方法,根据传入的参数列表不同,执行不同的任务. 比如:functiion jz(money){ //现金结账:验钞,找零 }     function jz(cardId,pwd){ //刷卡结 ...

  6. 回顾HashMap

    一.HashMap的原理简述 HashMap是基于哈希表的非线程安全的Map实现,内部采用数组+链表实现,其内部类Node定义了数据元素类型,它扩展了Map.Entry<K,V>增加了指向 ...

  7. 第十四章 Java常用类

    14.常用类 14.1 字符串相关的类 1课时 14.2 JDK 8之前时间日期API 1课时 14.3 JDK8中新时间日期API 1课时 14.4 JDK8中的Optional类 1课时 14.5 ...

  8. yum源搭建

    1:vim /etc/yum.repo.d/ll.repo [local]   这里不能有空格,如[local yum] name=local baseurl=file:///yum gpgcheck ...

  9. 1.2.2 Excel中手机号或身份证号批量加密星号

    在对应的单元格中我们输入公式: =LEFT(C4,3)&"****"&RIGHT(C4,4)或=MID(C4,1,3)&"****"&a ...

  10. Intellij中部署Tomcat(详细版本-介绍了部署完之后的详细路径)

    https://blog.csdn.net/HughGilbert/article/details/56424137 要点如下: 1. CATALINA_HOME即Tomcat的安装目录 2. CAT ...