C语言和Lua交互(六)

来源:互联网 发布:兼职淘宝刷单可信吗 编辑:程序博客网 时间:2024/06/04 19:50

Lua调用C函数:将新的C函数注册到Lua中

直接上代码:

#include <stdio.h>#include <string.h>#include "lua.h"#include "lauxlib.h"#include "lualib.h"lua_State *L = NULL;//待注册的C函数。static int myadd(lua_State* L){    //double op1 = lua_tonumber(L,1);//获取参数,1表示Lua调用时的第一个参数(从左到右)    //检查栈中的参数是否是数字,不是则抛出错误信息    double op1 = luaL_checknumber(L,1);    double op2 = luaL_checknumber(L,2);    //将函数的结果压入栈中。如果有多个返回值,可以在这里多次压入栈中。    lua_pushnumber(L,op1 + op2);    //压入返回值结果数量    return 1;}//另一个待注册的C函数。static int mysub(lua_State* L){    double op1 = luaL_checknumber(L,1);    double op2 = luaL_checknumber(L,2);    lua_pushnumber(L,op1 - op2);    return 1;}const char* testluacode = "print(myadd(100,20)) print(mysub(99,20))";int main(void){    L = luaL_newstate();//打开Lua,创建一个新环境(新的Lua状态)    luaL_openlibs(L); //打开标准库, 如: print, pcall    //lua_pushcfunction(L,myadd);//压入函数    //lua_setglobal(L,"myadd");//赋值全局变量    //和以下等价,将指定的函数注册为Lua的全局函数变量    //第一个参数为Lua在调用C函数时的全局函数名,第二个参数为实际C函数的指针。    lua_register(L, "myadd", myadd);    lua_register(L, "mysub", mysub);    //在Lua的代码块中使用已注册的C函数    if (luaL_dostring(L,testluacode))        printf("Failed to invoke.\n");    lua_close(L);    return 0;}
0 0