`
shumo
  • 浏览: 9594 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Lua与C混编

阅读更多

看了云风 的博客,里面有很大篇幅是关于Lua 的,所以想感受一下Lua。

    先前也用过很多脚本语言,用php写过网页,python写过简单小程序, 后来由于rails接触了ruby, 似乎ruby更优雅,工作需要也写perl。由于这些脚本语言平时不怎么用,每次用的时候都要看一下相应的tutorial,而且要不时的查文档。

    安装了Lua for Windows 最新版本 5.1.4.23,安装后运行QuickLuaTour,简单了解了Lua的一些语言元素和一些控制结构,标准库等。接着看自带的参考手册,比较郁闷,从中索引到了Programming in Lua,阅读了前面几个章节,了解到Lua是做为一种嵌入式、易扩展、过程化的脚本语言而存在,作为小规模的语言(只包含少数的标准库base,string,table,io,os等),其供c/c++使用的语言动态链接库(164k, 11k)和静态库(26k),很容易实现和其他语言的互相调用。内建的高级数据类型方面,没有像上述的几种脚本语言有List(Array), Dict(关联数组)等,仅有一个万能的table,索引比较自由,.和[]可以共用。

    接下来尝试了c调用Lua的函数和全局变量。新建一个vc的空的控制台项目,引入lua51.lib,把lua5.1.dll, lua51.dll放到工作目录中,新建maz.lua内容为

name = "javaeye\n"

function add(x, y)
	return x+y
end

   新建main.c内容为

 

#include <stdio.h>
#include <lua.h>
#include <lauxlib.h>

lua_State *L;

/**
 * 函数调用过程是一个入栈出栈的过程,需要把函数,参数分别压入堆栈,
 * 通过lua_call,调用堆栈中的函数并弹出相关数据
 * 这个过程跟java虚拟机的字节码方法调用基本一致,把数据送入操作栈,然后调用、出栈
 * 
 */
int luaadd(int x, int y) 
{
	int sum;
	lua_getglobal(L, "add");
	lua_pushnumber(L, x);
	lua_pushnumber(L, y);
	/* LUA_API void  (lua_call) (lua_State *L, int nargs, int nresults); */
	lua_call(L, 2, 1);
	sum = (int)lua_tonumber(L, 1);
	lua_pop(L, 1);
	return sum;
}

int main(int argc, char *argv[]) 
{
	char line[BUFSIZ];
	char *name;
	L = lua_open();
	luaL_dofile(L, "maz.lua");
	printf("1+2=%d\n", luaadd(1, 2)); 
	lua_getglobal(L, "name");
	name = (char *)lua_tostring(L, 1);
	lua_pop(L, 1);
	printf("name: %s", name);
	lua_close(L);
	return 0;
}

    代码很简明(代码是参考网上的),这样就实现了c调用Lua代码,Lua代码动态的解释执行。无需参与程序编译,可以代替或增强配置文件。今天主要是想了解一下Lua,有些细节的东西待深入学习。

    其中Lua调用C的部分改日补充

分享到:
评论

相关推荐

    lua和c语言之间相互调用实例

    在IT领域,编程语言间的互操作性是至关重要的,尤其是当需要将低级语言(如C)的强大性能与高级语言...在提供的压缩文件`cluatest.rar`和`luac.rar`中,可能包含了具体的示例代码和实践教程,供你进一步学习和研究。

    LUAC脚本解密_luac解密在线_luac4加密_luac反编译_luac4解密工具_luac解密工具

    LUAC脚本是一种基于Lua语言的编译格式,它将Lua源代码编译成字节码,以便在 Lua 解释器上高效运行。LUAC(Lua Compiler)是Lua官方提供的编译器,它将源代码转换为这种优化的字节码,以提高执行速度。在游戏开发、...

    Lua与C交互示例

    总结,Lua与C的交互涉及多个层次,包括创建和管理Lua环境、在C中调用Lua函数、在Lua中调用C函数以及通过DLL扩展功能。理解这些核心概念和接口,可以帮助开发者充分利用Lua的灵活性和C的性能,构建强大的混合系统。在...

    Lua_C 实现Lua与C API互调

    它提供了与C语言的紧密集成,允许开发者通过Lua_C接口实现lua和C代码的互调,以提高程序性能或者利用C库的能力。本文将深入探讨如何在Visual Studio 2008环境下,通过Lua_C接口实现Lua与C API的互调。 首先,要理解...

    LUAC反编译_LUC_lua反编译工具_luac_luac解密工具_Lua解密_

    Lua源代码是文本形式的,易于阅读和编写,但为了保护代码不被轻易篡改或盗用,开发者通常会将Lua代码编译成字节码(.lua.c文件或.luac文件)。"LUAC"就是Lua的官方编译器,它将Lua源代码转换为字节码,以提高执行...

    lua_c_lua_c

    标题 "lua_c_lua_c" 暗示了这个项目是一个结合C语言与Lua脚本语言交互的示例。在这个场景中,C代码被用来作为宿主环境,它能够调用Lua脚本,反之亦然,Lua脚本也可以调用C语言编写的函数。这种结合在游戏开发、...

    lua与c交互学习

    - **通过Lua的C库**:更常见的是通过C语言的API来调用Lua脚本,这种方式在实际应用中更为普遍,尤其是在游戏引擎和大型软件项目中。 #### 二、深入理解Lua的C库 Lua的C库提供了丰富的API,使得开发者能够轻松地将...

    LUAC解密工具.zip_andlua解密工具_andlua解密软件_lua 4.2解密_luac转lua_lua解密工具

    "LUAC解密工具"就是针对Lua编译后的二进制文件(.luac)进行解密的工具,目的是为了让加密过的Lua代码能够恢复成可读的源代码格式(.lua)。 LUAC是Lua的编译器,它将Lua源代码转换为字节码,这个过程通常是为了...

    lua加密成luac工具

    ios版本将lua加密成luac

    Lua和C语言交互.zip

    在Lua中,可以通过其C API(应用程序接口)来实现与C语言的交互。这个API允许C程序员编写扩展模块,这些模块可以被Lua解释器加载并作为 Lua 脚本的一部分运行。下面我们将深入探讨如何实现这一交互过程。 1. **编译...

    C语言头文件 LUA_C

    C语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 ...

    lua 和 C 语言的相互调用完整示例(vc6.0)

    1. Lua与C语言的接口:Lua提供了一组C API,允许C程序直接操作Lua虚拟机,执行脚本、读取和修改全局变量、调用函数等。这些接口包括luaL_newstate创建新的Lua状态,luaL_loadbuffer或luaL_loadfile加载Lua代码,lua_...

    Lua与C/C++交互——C/C++调用Lua脚本

    2. **C/C++与Lua交互的库** 在C/C++中调用Lua脚本,我们需要利用Lua提供的C API。Lua的源代码库包含一组C函数,允许我们加载、运行和控制Lua虚拟机。这些API函数提供了创建和操作全局变量、执行脚本、调用函数、...

    luac解密用.rar_LUAC 5.3 解密_U3d luac解密_luac解密_shirtqyf_解密

    4. **加密与解密**:为了保护游戏逻辑不被轻易反编译,开发者可能会对LUAC字节码进行加密。加密通常采用各种算法,如XXTEA(Extreme eXtended Tiny Encryption Algorithm),这是一种快速且高效的块密码。 5. **...

    lua与c交互

    总结来说,C 语言与 Lua 的交互涉及 Lua 的 C API,通过这个接口,C 程序可以加载、执行 Lua 脚本,同时允许 Lua 脚本调用 C 函数,实现两者之间的数据交换。这种交互模式为 C 程序提供了丰富的脚本功能,增强了程序...

    mac下使用的luac 编译lua 基于5.1版本

    mac下使用的luac编译lua luac文件支持64位 基于5.1版本 mac下使用的luac编译lua luac文件支持64位 基于5.1版本 mac下使用的luac编译lua luac文件支持64位 基于5.1版本

    lua c&c++动态连接库示例

    在Lua中调用C/C++代码,主要依赖于Lua的C API,这是一个接口,允许C/C++代码与Lua交互。C/C++函数可以被注册到Lua全局环境中,使得Lua脚本可以直接调用。在这个过程中,我们需要定义一个C函数作为"导出",以便Lua...

    万能LUAC解密工具_lua万能解密

    包含多个lua版本,内置详细配置JDK教程,轻松解密LUA加密文件

    lua与C相互调用例子程序

    1. Lua C API:这是C代码与Lua交互的基础,它提供了一系列的函数,如luaL_newstate创建Lua虚拟机,luaL_loadbuffer或luaL_loadfile加载并编译Lua代码,lua_pcall执行 Lua 函数,以及lua_gettop、lua_pushvalue等获取...

    王桂林--lua.pdf

    - **C语言接口**:Lua提供了一个简单的API来与C语言进行交互,这使得Lua非常适合嵌入到C/C++程序中。 - **自动内存管理**:Lua采用自动垃圾回收机制,减少了程序员手动管理内存的工作量。 #### 1.2. 环境搭建 ####...

Global site tag (gtag.js) - Google Analytics