1. 程式人生 > >8、Lua中呼叫C++函式

8、Lua中呼叫C++函式

    來往來往,有來有往才能叫做來往。既然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

執行結果

執行結果