[英]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.