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. CCF-权限查询-201612-3

    这道题,开始只有10分.....原因是将false 写成了 flase 我要吐血而亡....关键是还debug了半天,以为是逻辑错了 不过亮点是代码很简洁,网上140+的代码看着真复杂 核心: 做题之 ...

  2. 安装ucenter以及单点实现

    1.下载ucenter包 最好是utf-8格式2.解压得到4个安装包 3.1)新建一个站点c 把upload中的所有文件复制到站点根目录下中2)访问出现 Please click here to in ...

  3. Centos7 安装Nginx 防火墙开放80端口给外网访问

    Centos7的防火墙改成了firewall,不再叫iptables,开放端口的方法如下: firewall-cmd --zone=public --add-port=80/tcp --permane ...

  4. python __name__ 和__main__的使用领悟

    __name__和__main__的使用 #hello.pydef sayHello(): str="hello" print(str); if __name__ == " ...

  5. hnsdfz -- 6.19 -- day4

    感觉还好…… 暴力分挂了很多不知道为什么…… 听说今天出题人hsh很劲…… c题正解是个奇怪的知识点…… 恩总的来说今天的节奏依旧很散(大课间去围观sdfz跑操了233 暴力分都写了但是似乎没有尝试脑 ...

  6. java web(七): mybatis的动态sql和mybatis generator自动生成pojo类和映射文件

    前言: MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据 不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还 ...

  7. delphi XML简单处理

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  8. centos7 设置时区和时间

    1.设置时区(同步时间前先设置) timedatectl set-timezone Asia/Shanghai 2.安装组件 yum -y install ntp systemctl enable n ...

  9. 关于bit,bin文件的一些研究

    关于bit,bin文件的一些研究 bit文件里面有head information 但bin文件里面并不包含 bit 文件里面包含如下信息 SPI flash 时钟需要用到的源语 watchdog 设 ...

  10. 配置jboss为windows服务

    先确保jdk和jboss的环境变量是正常可用的 1.(下载binaries 2.x.x-windows x86)找到service.bat和jbosssvc.exe两个文件 1.1 binaries ...