使用lua扩展应用程序

简介: 全局变量的操作 void lua_getglobal(lua_State * L ,const char * name) 此函数从lua中取出一个名为name的全局变量并将其压入栈中。 如当lua文件内容为 width = 200 height = 300 时,以下代码 in...
  1. 全局变量的操作

void lua_getglobal(lua_State * L ,const char * name)

此函数从lua中取出一个名为name的全局变量并将其压入栈中。

如当lua文件内容为

width = 200
height = 300

时,以下代码

int _tmain(int argc, _TCHAR* argv[])
{

    lua_State *L = luaL_newstate();
    luaL_openlibs(L);


    if(0 != luaL_loadfile(L,"config_width_height.lua"))
    {
        printf("loadbuff error :%s",lua_tostring(L,-1));
        lua_pop(L,-1);
    }
    if(0 != lua_pcall(L,0,0,0))
    {
        printf("pcall error :%s",lua_tostring(L,-1));
        lua_pop(L,-1);
    }

    lua_getglobal(L,"width");
    printf("width  = %d\n",lua_tointeger(L,-1));
    lua_getglobal(L,"height");
    printf("height = %d\n",lua_tointeger(L,-1));


    lua_settop(L,0);
    lua_close(L);

    system("pause");
    return 0;
}

运行结果为
width  = 200
height = 300
请按任意键继续. . .

2.   table的操作

文件内容:

width = 200
height = 300

background =
{
    r = 0,
    g = 0,
    b = 1
}

获取以上 r g b的代码

    int red;
    int blue;
    int green;
    lua_getglobal(L,"background");   //push table
    if(lua_istable(L,-1))
    {
        red = getfield(L,"r");
        green = getfield(L,"g");
        blue = getfield(L,"b");
        printf("red:%d,green:%d blue:%d ",red,green,blue);
    }

 

注意:getfield不是 lua内置函数。getfield函数如下。

/*假设table 们位于栈顶*/
int getfield(lua_State * L,const char * key)
{
    int result ;
    lua_pushstring(L,key);      //push index
    lua_gettable(L,-2);//获取table   //pop index push table[index]
    if(!lua_isnumber(L,-1))
        printf("error is the value is not a value\n");
    result = (int ) lua_tonumber(L,-1) * MAX_COLOR;
    lua_pop(L,1);  
    return result;
}
相关文章
|
19天前
|
Go 数据处理 开发者
Go 语言的反射机制允许程序在运行时动态检查和操作类型信息,提供极大的灵活性和扩展性
Go 语言的反射机制允许程序在运行时动态检查和操作类型信息,提供极大的灵活性和扩展性。本文探讨了反射的基本原理、主要操作、应用场景及注意事项,并通过实例展示了反射的实际应用,帮助开发者更好地理解和使用这一强大特性。
26 2
|
18天前
|
数据库连接 PHP 开发者
PHP中的异常处理:构建健壮的应用程序####
本文深入探讨了PHP中异常处理的重要性和实践方法,通过具体代码示例和最佳实践,展示了如何利用try-catch语句、自定义异常类以及全局异常处理器来提升应用程序的稳定性和可维护性。无论你是初学者还是有经验的开发者,本文都将为你提供有价值的见解和实用技巧,帮助你构建更加健壮的PHP应用程序。 ####
|
XML 传感器 关系型数据库
c/c++和lua的交互使用分享
c/c++和lua的交互使用分享
517 0
c/c++和lua的交互使用分享
配置Lua环境
配置Lua环境
178 0
|
C# 图形学 Windows
原生实现C#和Lua相互调用-Unity3D可用【中】
1. 编译Windows下使用的DLL文件 使用VS2015创建一个空的动态链接库项目,删除里面默认创建的几个文件(如果想自定义拓展可用保留),然后把Lua的源码拷贝进来,添加到项目工程中,编译宏需要配置LUA_BUILD_AS_DLL和_CRT_SECURE_NO_WARNINGS。然后就可以编译x86和x64的DLL动态库,整体步骤简单易操作。
200 0
|
API C# Android开发
原生实现C#和Lua相互调用-Unity3D可用【上】
1. 编译Windows下使用的DLL文件 使用VS2015创建一个空的动态链接库项目,删除里面默认创建的几个文件(如果想自定义拓展可用保留),然后把Lua的源码拷贝进来,添加到项目工程中,编译宏需要配置LUA_BUILD_AS_DLL和_CRT_SECURE_NO_WARNINGS。然后就可以编译x86和x64的DLL动态库,整体步骤简单易操作。
327 0
|
C# 图形学 C++
原生实现C#和Lua相互调用-Unity3D可用【下】
1. 编译Windows下使用的DLL文件 使用VS2015创建一个空的动态链接库项目,删除里面默认创建的几个文件(如果想自定义拓展可用保留),然后把Lua的源码拷贝进来,添加到项目工程中,编译宏需要配置LUA_BUILD_AS_DLL和_CRT_SECURE_NO_WARNINGS。然后就可以编译x86和x64的DLL动态库,整体步骤简单易操作。
365 0
|
NoSQL Serverless Linux
开发函数计算的正确姿势———为 PHP 运行时添加自定义扩展
PHP 语言提供了一种扩展机制(Extension),通过 PHP 扩展可以增强语法、调用 C/C++ 实现的库函数以及优化执行性能。PHP 扩展是与平台相关的动态链接库,在 Linux 和 Mac 平台是 .so 文件,在 Windows 平台是 .dll 文件。由于函数计算的开发通常在 Mac 和 Windows 平台,而运行时是 Linux(Debain)环境,所以为函数计算 PHP 运行时添加扩展会遇到由于动态链接库平台相关而导致要么本地无法调试,要么远端无法运行的问题。本文介绍借助 Funcraft 工具提供的模拟环境进行 PHP 扩展的安装、本地运行调试以及构建发布。
开发函数计算的正确姿势———为 PHP 运行时添加自定义扩展
|
C# 图形学
Unity3D 预备知识:C#与Lua相互调用
  在使用Unity开发游戏以支持热更新的方案中,使用ULua是比较成熟的一种方案。那么,在使用ULua之前,我们必须先搞清楚,C#与Lua是怎样交互的了? 一.基本原理   简单地说,c#调用lua, 是c# 通过Pinvoke方式调用了lua的dll(一个C库),然后这个dll执行了lua脚本。
3016 1