程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++與Lua交互(四)

C++與Lua交互(四)

編輯:C++入門知識

引言   通過前幾篇,我們已經對Lua的C API有了一定的了解,如lua_push*、lua_is*、lua_to*等等。用C++調用Lua數據時,我們主要運用lua_getglobal與lua_push*配合以達到目的。現在我們來試試用Lua調用C++數據。   C++數據類型映射到Lua   C++中數據類型有這麼幾種:1、內建的int、float等;2、指針,如void *、int *、int (*fun)(int, int)等;3、用戶自定義的class、strcut等。Lua中C API支持操作的數據類型有如下:   image   見名知意,從他們的參數,我們就可以看出來他們的作用。比如:lua_pushlightuserdata用來將指針壓棧,lua_pushcclosure用來將函數壓棧,不一而足。通過這些API,我們可以將C++中的數據結構一一映射到Lua中。   Lua調用C++內置常用數據類型與函數   我們要將一個值,從C++傳入Lua,必須有兩個步驟:1、值是多少?通過lua_push*將值壓入棧頂,此時該值的類型與值的大小已確定;2、用什麼名字來引用該值?通過lua_setglobal來用一個名字引用棧頂的值。我們來按照這個步驟,嘗試一下將一個變量傳入Lua,代碼如下:   #include <iostream> #include <fstream> #include <string> using namespace std;   extern "C" {   #include <lua.h> #include <lauxlib.h> #include <lualib.h> };   void TestLua2(); int main() {     TestLua2();     return 0; }   void TestLua2() {     lua_State *L = luaL_newstate();     luaopen_base(L); //     luaopen_table(L); //     luaopen_package(L); //     luaopen_io(L); //     luaopen_string(L); //     luaL_openlibs(L); //打開以上所有的lib          int valueCPP = 1;       // 將a值壓入棧頂     lua_pushnumber(L, valueCPP);     // 命名棧頂的值     lua_setglobal(L, "valueCPP");       string str;     while (true)     {         cout << "輸入lua文件路徑:" << endl;         getline(cin, str, '\n');         if (luaL_loadfile(L, str.c_str())             || lua_pcall(L, 0, 0, 0) )         {             const char * error = lua_tostring(L, -1) ;             cout << string(error) << endl;         }     }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved