8、Lua中呼叫C++函式
阿新 • • 發佈:2019-02-09
來往來往,有來有往才能叫做來往。既然C/C++和lua是好親戚,那就會有來有往。之前,我們一直在討論在C/C++中如何使用Lua提供的變數和函式。從這篇文章開始,咱們來討論一下如何在Lua中使用C/C++提供的變數、函式甚至類。
當然,我們還是假設lua是嵌入C/C++程式裡面的。所以,使用lua依然是為了擴充套件C/C++。這個目的一定要先明確了。接下來的事情就比較容易了。
既然,想讓lua呼叫C/C++的函式。首先,肯定是讓lua知道C/C++函式的存在,然後才能呼叫。再次明確一下我們使用lua是為了擴充套件C/C++的。就像一個家庭一樣,C/C++作為一家之長,當然也就需要主動一點。廢話少說,程式碼說話。
LuaCallCFun.lua
local x=123
local y=456
print("lua: x(" .. x .. ") + y(" .. y .. ") = " .. cf_Add(x, y))
LuaCallCFun.cpp
#include <lua.hpp>
int cf_Add(lua_State *L)
{
int x = lua_tonumber(L, 1);
int y = lua_tonumber(L, 2);
int ret = x + y;
printf("cf_Add: x(%d ) + y(%d) = %d\n", x, y, ret);
lua_pushnumber(L, ret);
return 1;
}
int main(int argc, char * argv[])
{
lua_State *L = lua_open();
luaopen_base(L);
// 往lua中註冊函式
lua_pushvalue(L, LUA_GLOBALSINDEX);
lua_pushstring(L, "cf_Add");
lua_pushcfunction(L, cf_Add);
lua_rawset(L,-3 );
lua_pop(L,1);
luaL_dofile(L, "LuaCallCFun.lua");
lua_close(L);
}
測試環境
型別 | 值 |
---|---|
作業系統 | Ubuntu 10.10 |
lua | 5.1.4 |