{--1、环境--}

为了快速入手,使用了小巧快速的vc++6.0编译器

以及在官网下载了Lua安装包..官网地址{--http://10.21.210.18/seeyon/index.jsp--}

两者都安装好后,即可进行

{--2、工程以及配置--}

1、首先用vc++6.0创建一个简单的win32 console application

2、从Lua的安装目录下复制include和lib两个目录下的文件到刚刚创建的工程的目录下。

  {include:包含了lua的.h头文件}

  {lib:包含了lua的动态链接库dll}

3、为了使vc++6.0编译和链接时能找到所需的Lua文件

  {在工程下添加刚刚复制过来的所有.h文件,保证编译通过}

   {在编译器里面设置dll{工程-设置-对象/库模块 那一行的最后添加 lua5.1.lib lua51.lib,保证链接时通过}}

{--3、C++与Lua相互调用例子--}

要调用Lua,首先我们得写一个简单的Lua文件,并把该文件保存到一个路径下,这里比如路径是{F:\\Lua}

function add(x, y)
n1, n2 = clib();//关于clib()是一个C函数,稍后会介绍到。
print("The first arg"..n1);
print("The second arg"..n2);
return x + y
end

该函数用于计算从C函数传递过来的的两个参数x,y的和。

另外为了方便,这函数里面同时也演示了如何调用Lua如何调用C函数clib()

接下来我们开始编写主函数

#include<stdlib.h>

// 这是个C++程序, 所以要extern "C",
// 因为lua的头文件都是C格式的
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
} lua_State* L; /* the Lua interpreter */ //给lua调用的c函数必须定义成static int XXX(lua_State *L)
static int clib(lua_State *L)
{
  lua_pushnumber(L, 100);
  lua_pushnumber(L, 200);
return 2;
  //lua调用该函数将从栈中,取2个结果
}

//此处C++调用了Lua函数
int luaadd (int x, int y)
{
int sum;
/* the function name */
lua_getglobal(L, "add");
/* the first argument */
lua_pushnumber(L, x);
/* the second argument */
lua_pushnumber(L, y);
/* call the function with 2 arguments, return 1 result */
//说明调用的函数是带有2个参数和1个返回值
lua_call(L, 2, 1); /* get the result */
sum = (int)lua_tonumber(L, -1);
lua_pop(L, 1); return sum;
} int main(int argc, char* argv[])
{
int sum; /* initialize Lua */
L = luaL_newstate();//创建一个指向lua解释器的指针
/* load Lua base libraries */
luaL_openlibs(L);
lua_register(L, "clib", clib);
/* load the script */
/*Lcc.lua是这个C++程序调用的Lua文件,
注意luaL_dofile()函数的第二个参数要写绝对路径,否则执行后会提示
“unprotected error in call to lua api(attampt to call a nil value)”错误 */
luaL_dofile(L, "F:\\lua\\Lcc.lua"); /* call the add function */
sum = luaadd(10, 15); /* print the result */
printf( "The sum is %d\n", sum ); /* cleanup Lua */
lua_close(L);
system("pause");
return 0;
}

以上的clib()函数就是Lua文件里面要调用的函数

关键代码:lua_register(L, "clib", clib);将函数注册到Lua栈中,使得Lua可以调用到。

而C++如何调用Lua

关键代码:luaL_dofile()以及luaadd()函数

-------------------------------------------------------------------------------------

                                    By Alwaystiys..

                                    From 2014.09.05

                                    At Gz.

Lua与C++相互调用的更多相关文章

  1. lua编程之lua与C相互调用

    lua是扩展性非常良好的语言,虽然核心非常精简,但是用户可以依靠lua库来实现大部分工作.除此之外,lua还可以通过与C函数相互调用来扩展程序功能.在C中嵌入lua脚本既可以让用户在不重新编译代码的情 ...

  2. uLua学习笔记(三):Unity3D和Lua之间的相互调用

    这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方 ...

  3. lua语言自学知识点----Lua与.Net相互调用

    知识点: LuaInterface作用是用来完成Lua与C#的相互调用. LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级) 2.luane ...

  4. Lua 与 OC 相互调用

    本文主要讲如何完成lua和object-c的相互调用.       lua是一种脚本语言,可以方便的移植到各种宿主语言中,并且可以支持热更新,在游戏开发中也能当做主要的语言来编写游戏的逻辑,但是要接入 ...

  5. C和Lua之间的相互调用

    前面的话 第一次接触Lua是因为Unity游戏中需要热更,但是一直没搞懂Lua是怎么嵌入到别的语言中执行的,如何互相调用的.这次打算好好了解一下C跟lua是如何交互的 那么如何使用Lua语言? lua ...

  6. C#与lua相互调用

    Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)C#调用Lua 测试环境:在VS2015中建一个C# ...

  7. C程序与Lua脚本相互调用

    Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...

  8. Unity3D 预备知识:C#与Lua相互调用

    在使用Unity开发游戏以支持热更新的方案中,使用ULua是比较成熟的一种方案.那么,在使用ULua之前,我们必须先搞清楚,C#与Lua是怎样交互的了? 简单地说,c#调用lua, 是c# 通过Pin ...

  9. 原生实现C#和Lua相互调用-Unity3D可用

    引言     本篇简单介绍如何在C#中执行Lua脚本,传递数据到Lua中使用,以及Lua中调用C#导出的方法等.在Unity中开发测试,并打IL2CPP的Android包在模拟器上运行通过.Lua版本 ...

随机推荐

  1. fifter常见的运用场景

    没配置过滤器 package servlet; import java.io.IOException; import javax.servlet.ServletException; import ja ...

  2. charles抓包的使用教程

    // Charles 从入门到精通:(http://blog.csdn.net/donwei8/article/details/51647752) //抓包工具:Charles-断点修改 教程 (ht ...

  3. PHP 小方法之 仿百度蜘蛛采集

    if(!function_exists('_GetContent')){ function _GetContent( $url ){ $ch = curl_init(); $ip = '220.181 ...

  4. C++ 不能在类体外指定关键字static

    C++ static 函数的问题 近日读 C++ primer 中static 一章 , 有这么一句话, “静态成员函数的声明除了在类体中的函数声明前加上关键字static 以及不能声明为const  ...

  5. mac 文本编辑器 文本编码Unicode utf-8 不适用的问题

    在mac上使用默认的文本编辑器打开下载的xx.txt文件,如果文本是gbk的编码可能会出现 文本编码Unicode utf-8 不适用的打开错误,如下图 解决方式: 文本编辑---偏好设置-----打 ...

  6. js高级程序设计(七)BOM

    window 对象 BOM 的核心对象是window,它表示浏览器的一个实例.在浏览器中,window 对象有双重角色,它既是通过JavaScript 访问浏览器窗口的一个接口,又是ECMAScrip ...

  7. [整]C#获取天气预报信息(baidu api)包括pm2.5

    /// <summary> /// 获取天气预报信息 /// </summary> /// <returns></returns> public Bai ...

  8. 根据ip获取用户地理位置

    各大网站都提供根据ip获取用户地理位置信息,这里以新浪的接口为例子 接口地址为:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js ...

  9. Windows 下java环境变量的配置(Windows7 ,8,8.1,10)

    Windows 下java环境变量的配置 在“系统”面板的左上角选择“高级系统设置”,在弹出的系统属性中选择”高级“项,然后点击右下角的“环境变量(N)...”,就此进入JAVA环境变量的配置. 如果 ...

  10. 计算机网络(5)-----ICMP协议和PING程序

    控制报文协议(Internet Control Message Protocol) 定义 它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可 ...