簡體   English   中英

C ++從Lua腳本調用函數

[英]C++ Calling function from Lua script

我正試圖在我的應用程序中綁定Lua,現在我試圖測試如何將Lua綁定到C ++中。 我的問題很奇怪,因為我想在luaL_loadfile之后從腳本調用函數main() 我的代碼:

#include <iostream>
#include <cstdlib>
#include <stdio.h>

#include "lua.hpp"
#include "lauxlib.h"
#include "lualib.h"

using namespace std;

int main(int argc, char **argv) {
    lua_State* lua = luaL_newstate();
    luaL_openlibs(lua);

    if (luaL_loadfile(lua, "test.lua") != 0) {
        std::cout << lua_tostring(lua, -1) << "\n";
        lua_pop(lua, 1);
        return 1;
    }

    lua_getfield(lua, LUA_REGISTRYINDEX, "main");
    if (lua_pcall(lua, 0, 1, 0) != 0) {
        printf("Error running function 'main': %s\n", lua_tostring(lua, -1));
        return 1;
    }

    lua_close(lua);

    return 0;
}

我的輸出是:

運行'main'函數時出錯:嘗試調用nil值

我在本文中使用Lua 5.2擴展了一個C ++應用程序 ,將lua 5.2嵌入到Visual Studio 2005控制台項目中。

從你的lua腳本調用main()真的沒有意義,因為main()是你的應用程序的入口點,你需要做Lua初始化的東西而且只做一次。

我放在一起的示例和文章顯示了使用Lua 5.2和C ++,並能夠調用您從Lua腳本創建的C函數。 該示例還顯示了從C ++程序調用Lua函數。

大約一年前我使用Visual Studio 2005做了這個。我懷疑從Visual Studio 2005到2012將是直截了當的。 我不確定移植到另一個編譯器和開發環境是多么簡單。 至少,與Visual Studio 2005中的Windows控制台應用程序一起使用的_tmain()函數需要重命名為main()。

嘗試使用luaL_dofile而不是luaL_loadfile

這是最常見的錯誤之一: luaL_loadfile加載文件但不運行它; 它只是在堆棧上留下一個表示已加載文件的函數,可以調用它。 函數main僅在腳本運行時定義,即調用腳本函數時定義。 錯誤消息試圖告訴您。 (我假設你的腳本定義了一個名為main的函數。沒有任何實際需要,但它是無害的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM