lua调用C

本文介绍了一个C语言与Lua脚本语言交互的例子。通过C语言实现了一个Lua可调用的函数,并展示了如何加载Lua脚本文件、调用Lua中的全局变量及函数,并返回结果到Lua。此示例涵盖C语言中Lua库的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


//----------------------------------------------------

//AUTHOR: lanyang123456

//DATE: 2014-10-23

//----------------------------------------------------




C代码:


/*clua.c*/
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

#include <stdlib.h> /* For function exit() */
#include <stdio.h> /* For input/output */

void bail(lua_State *L, char *msg)
{
	fprintf(stderr, "\nFATAL ERROR:\n %s: %s\n\n",
            msg, lua_tostring(L, -1));
        exit(1);
}



int lua_func_from_c(lua_State *L) 
{
        printf("This is C\n");
        int argc = lua_gettop(L);    /* number of arguments */
        const char * str = lua_tostring(L,1);    /* the first argument: string */
        int num = lua_tonumber(L,2); /* the second argument: number */
        
        printf("The first argument: %s\n", str);
        printf("The second argument: %d\n", num);

        lua_getglobal(L,"global_var");
        const char * global_str = lua_tostring(L,-1);
        printf("global_var is %s\n", global_str);

        int the_second_ret = 2*num;
        lua_pushstring(L, "the first return");
        lua_pushnumber(L, the_second_ret);
        return 2;            /* tell lua how many variables are returned */
 }




int main(int argc, const char *argv[])
{
        if(argc != 2)
        {
            return 1;
        }
        lua_State *L = luaL_newstate(); /* Create new lua state variable */

        /* Load Lua libraries, otherwise, the lua function in *.lua will be nil */
        luaL_openlibs(L);
        
        /* register new lua function in C */
        lua_register(L, "lua_func_from_c", lua_func_from_c);

        if( luaL_loadfile(L,argv[1]) ) /* Only load the lua script file */
            bail(L, "luaL_loadfile() failed");

        if( lua_pcall(L,0,0,0) ) /* Run the loaded lua file */
            bail(L, "lua_pcall() failed");
        lua_close(L);                 /* Close the lua state variable */    

        return 0;
}

lua代码:


--test.lua
print("Hello world")
global_var = "this is a global string"
local first, second = lua_func_from_c("the first one", 3)
print("the first returned", first)
print("the second returned", second)



测试:

$ gcc -o test clua.c -llua -ldl -lm   

这些编译选项很重要。

$ ./test test.lua
Hello world
This is C
The first argument: the first one
The second argument: 3
global_var is this is a global string
the first returned    the first return
the second returned    6


参考

http://blog.youkuaiyun.com/wangbin579/article/details/7265405
http://blog.chinaunix.net/uid-16175292-id-3472702.html



内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值