看了云风
的博客,里面有很大篇幅是关于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的部分改日补充
分享到:
相关推荐
在IT领域,编程语言间的互操作性是至关重要的,尤其是当需要将低级语言(如C)的强大性能与高级语言...在提供的压缩文件`cluatest.rar`和`luac.rar`中,可能包含了具体的示例代码和实践教程,供你进一步学习和研究。
LUAC脚本是一种基于Lua语言的编译格式,它将Lua源代码编译成字节码,以便在 Lua 解释器上高效运行。LUAC(Lua Compiler)是Lua官方提供的编译器,它将源代码转换为这种优化的字节码,以提高执行速度。在游戏开发、...
总结,Lua与C的交互涉及多个层次,包括创建和管理Lua环境、在C中调用Lua函数、在Lua中调用C函数以及通过DLL扩展功能。理解这些核心概念和接口,可以帮助开发者充分利用Lua的灵活性和C的性能,构建强大的混合系统。在...
它提供了与C语言的紧密集成,允许开发者通过Lua_C接口实现lua和C代码的互调,以提高程序性能或者利用C库的能力。本文将深入探讨如何在Visual Studio 2008环境下,通过Lua_C接口实现Lua与C API的互调。 首先,要理解...
Lua源代码是文本形式的,易于阅读和编写,但为了保护代码不被轻易篡改或盗用,开发者通常会将Lua代码编译成字节码(.lua.c文件或.luac文件)。"LUAC"就是Lua的官方编译器,它将Lua源代码转换为字节码,以提高执行...
标题 "lua_c_lua_c" 暗示了这个项目是一个结合C语言与Lua脚本语言交互的示例。在这个场景中,C代码被用来作为宿主环境,它能够调用Lua脚本,反之亦然,Lua脚本也可以调用C语言编写的函数。这种结合在游戏开发、...
- **通过Lua的C库**:更常见的是通过C语言的API来调用Lua脚本,这种方式在实际应用中更为普遍,尤其是在游戏引擎和大型软件项目中。 #### 二、深入理解Lua的C库 Lua的C库提供了丰富的API,使得开发者能够轻松地将...
"LUAC解密工具"就是针对Lua编译后的二进制文件(.luac)进行解密的工具,目的是为了让加密过的Lua代码能够恢复成可读的源代码格式(.lua)。 LUAC是Lua的编译器,它将Lua源代码转换为字节码,这个过程通常是为了...
ios版本将lua加密成luac
在Lua中,可以通过其C API(应用程序接口)来实现与C语言的交互。这个API允许C程序员编写扩展模块,这些模块可以被Lua解释器加载并作为 Lua 脚本的一部分运行。下面我们将深入探讨如何实现这一交互过程。 1. **编译...
C语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 LUA_CC语言头文件 ...
1. Lua与C语言的接口:Lua提供了一组C API,允许C程序直接操作Lua虚拟机,执行脚本、读取和修改全局变量、调用函数等。这些接口包括luaL_newstate创建新的Lua状态,luaL_loadbuffer或luaL_loadfile加载Lua代码,lua_...
2. **C/C++与Lua交互的库** 在C/C++中调用Lua脚本,我们需要利用Lua提供的C API。Lua的源代码库包含一组C函数,允许我们加载、运行和控制Lua虚拟机。这些API函数提供了创建和操作全局变量、执行脚本、调用函数、...
4. **加密与解密**:为了保护游戏逻辑不被轻易反编译,开发者可能会对LUAC字节码进行加密。加密通常采用各种算法,如XXTEA(Extreme eXtended Tiny Encryption Algorithm),这是一种快速且高效的块密码。 5. **...
总结来说,C 语言与 Lua 的交互涉及 Lua 的 C API,通过这个接口,C 程序可以加载、执行 Lua 脚本,同时允许 Lua 脚本调用 C 函数,实现两者之间的数据交换。这种交互模式为 C 程序提供了丰富的脚本功能,增强了程序...
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 API,这是一个接口,允许C/C++代码与Lua交互。C/C++函数可以被注册到Lua全局环境中,使得Lua脚本可以直接调用。在这个过程中,我们需要定义一个C函数作为"导出",以便Lua...
包含多个lua版本,内置详细配置JDK教程,轻松解密LUA加密文件
1. Lua C API:这是C代码与Lua交互的基础,它提供了一系列的函数,如luaL_newstate创建Lua虚拟机,luaL_loadbuffer或luaL_loadfile加载并编译Lua代码,lua_pcall执行 Lua 函数,以及lua_gettop、lua_pushvalue等获取...
- **C语言接口**:Lua提供了一个简单的API来与C语言进行交互,这使得Lua非常适合嵌入到C/C++程序中。 - **自动内存管理**:Lua采用自动垃圾回收机制,减少了程序员手动管理内存的工作量。 #### 1.2. 环境搭建 ####...