{--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. C语言细节——献给入门者(三)

    C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...

  2. 《K&R》中引用的几个排序算法(shellsort、)以及一个自己乱写的排序

    留待期末考后更新... void shellsort(int v[], int n) { int gap, i, j, temp; ; gap > ; gap /= ) for(i = gap; ...

  3. Shell 语法之函数

    函数是被赋予名称的脚本代码块,可以在代码的任意位置重用.每当需要在脚本中使用这样的代码块时,只需引用该代码块被赋予的函数名称. 创建函数 格式 function name { commands } n ...

  4. 启动tomcat后struts框架报异常严重: Exception starting filter struts2 Unable to load configuration.

    启动tomcat后struts框架报异常严重: Exception starting filter struts2 Unable to load configuration. 出现此异常是因为,str ...

  5. MySQL 循环执行kill语句杀掉连接

    mysql中创建索引时,一直卡住不动,刚开始以为可能是数据量太大导致的,可是一直等了很久还是一样没有反应,看来操作的表被锁住了,执行show processlist 果然发现有大量的lock,使用ki ...

  6. 【转】pycharm快捷键、常用设置、包管理

    转自:pycharm快捷键.常用设置.包管理 在PyCharm安装目录 /opt/pycharm-3.4.1/help目录下可以找到ReferenceCard.pdf快捷键英文版说明 or 打开pyc ...

  7. 【转】selenium之 定位以及切换frame

    转载自:http://www.voidcn.com/blog/huilan_same/article/p-6155896.html 很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明 ...

  8. oracle中DDL DML指什么?

    DDL create table 创建表 alter table 修改表 drop table 删除表 truncate table 删除表中所有行 create index 创建索引 drop in ...

  9. Windows Store App 用户库文件分组

    在Windows应用商店应用程序中浏览用户库中的文件时,可以将文件或者文件夹分组显示,以便于进行分类浏览,这类似于音乐库中的文件可以按照艺术家名称.创建日期或者评级等多种方式进行分类.本节内容将会介绍 ...

  10. Java 并发和多线程(一) Java并发性和多线程介绍[转]

    作者:Jakob Jenkov 译者:Simon-SZ  校对:方腾飞 http://tutorials.jenkov.com/java-concurrency/index.html 在过去单CPU时 ...