Lua调用C的函数

#include <iostream>
#include <string>
using namespace std;

extern "C"
{
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
}

int myTest(lua_State* L)
{
    // 获得Lua函数的参数的数量
    int nArgs = lua_gettop(L);
    cout << "nArgs = " << nArgs << endl;
    cout << "==================================================" << endl;
    for(int i = 1; i <= nArgs; ++i) {
        const char* str_arg_n = lua_tostring(L,i);
        cout << "[" << i << "] = " << str_arg_n << endl;
    }
    cout << "==================================================" << endl;

    //cout << "==================================================" << endl;
    //for(int i = -1; i >= -nArgs; --i) {
    //    const char* str_arg_n = lua_tostring(L,i);
    //    cout << "[" << i << "] = " << str_arg_n << endl;
    //}
    //cout << "==================================================" << endl;
    return 0;
}

int main(int argc,char* argv[])
{
    cout << "===============" << endl;
    cout << "Hello Lua :)" << endl;
    cout << "===============" << endl << endl;

    // char anyKey = 0;
    lua_State* L = lua_open();
    if( L == nullptr) {
        cout << "init Lua Environment Failed!!! " << endl;
        cout << "Press any key to exit ... ";
        getchar();
        return -1;
    }

    
    luaL_openlibs(L);
    lua_pushcfunction(L,myTest);
    lua_setglobal(L,"myTest");

    int ret = luaL_dofile(L, "script/test.lua");
    if( ret != 0 ) {
        const char* error = lua_tostring(L,-1);
        cout << "========== Error occurred =========="<< endl;
        cout << "execute test.lua , Meet some error" << endl;
        cout << "Error : " << endl << "\t"  << error << endl;
        cout << "==================================" << endl;
        cout << "Press any Key to quit ... ";
        getchar();
    } else {
        cout << "execute test.lua Successfully :) " << endl;
        cout << "Press any Key to quit ... ";
        getchar();
        // cin.get(anyKey);
    }
    return 0;
}


--
-- script/test.lua
--
myTest(333, "Hello World", 456.7, "Google")

--[[
nArgs = 4
==================================================
[1] = 333
[2] = Hello World
[3] = 456.7
[4] = Google
==================================================
--]]

posted @   EdisoNewton  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示