bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

C/C++中怎么用Lua函數

本篇內容介紹了“C/C++中怎么用Lua函數”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

創新互聯公司專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站設計、成都做網站、外貿網站建設、右玉網絡推廣、成都小程序開發、右玉網絡營銷、右玉企業策劃、右玉品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創新互聯公司為所有大學生創業者提供右玉建站搭建服務,24小時服務熱線:18982081108,官方網址:vcdvsql.cn

1.簡介

偶們這次主要說說怎么由Lua定義函數, 然后在C或者C++中調用. 這里偶們暫不涉及C++的對象問題, 只討論調用函數的參數, 返回值和全局變量的使用.

2.

這里偶們在e12.lua里先定義一個簡單的add(), x,y為加法的兩個參數,return 直接返回相加后的結果.

例e12.lua

-- add two numbers function add ( x, y ) return x + y end

在前一次里, 偶們說到 lua_dofile() 可以直接在C中執行lua文件. 因為偶們這個程序里只定義了一個add()函數, 所以程序執行后并不直接結果, 效果相當于在C中定義了一個函數一樣.

Lua的函數可以有多個參數, 也可以有多個返回值, 這都是由棧(stack)實現的.需要調用一個函數時, 就把這個函數壓入棧,  然后順序壓入所有參數, 然后用lua_call()調用這個函數. 函數返回后, 返回值也是存放在棧中.  這個過程和匯編執行函數調用的過程是一樣的.

例e13.cpp 是一個調用上面的Lua函數的例子

#include extern "C" { // 這是個C++程序, 所以要extern "C", // 因為lua的頭文件都是C格式的  #include "lua.h" #include "lualib.h" #include "lauxlib.h" } /* the Lua interpreter */ lua_State* L; int luaadd ( int x, int y ) { int sum; /* the function name */ lua_getglobal(L, "add"); /* the first argument */ lua_pushnumber(L, x); /* the second argument */ lua_pushnumber(L, y); /* call the function with 2 arguments, return 1 result */ lua_call(L, 2, 1); /* get the result */ sum = (int)lua_tonumber(L, -1); lua_pop(L, 1); return sum; } int main ( int argc, char *argv[] ) { int sum; /* initialize Lua */ L = lua_open(); /* load Lua base libraries */ lua_baselibopen(L); /* load the script */ lua_dofile(L, "e12.lua"); /* call the add function */ sum = luaadd( 10, 15 ); /* print the result */ printf( "The sum is %d\n", sum ); /* cleanup Lua */ lua_close(L); return 0; }

程序說明:

main中過程偶們上次已經說過了, 所以這次只說說luaadd的過程

* 首先用lua_getglobal()把add函數壓棧

* 然后用lua_pushnumber()依次把x,y壓棧

* 然后調用lua_call(), 并且告訴程序偶們有兩個參數一個返回值

* 接著偶們從棧頂取回返回值, 用lua_tonumber()

* ***偶們用lua_pop()把返回值清掉

運行結果:

The sum is 25

編譯方法

Linux下把程序存成e13.cpp

g++ e13.cpp -llua -llualib -o e13

./e13

VC下編譯方法

* 首先建立一個空的Win32 Console Application Project

* 把e13.cpp加入工程中

* 點project setting,然后設置link選項, 再加上lua.lib lualib.lib兩個額外的庫

3.全局變量

上面偶們用到了lua_getglobal()但并沒有詳細講, 這里偶們再舉兩個小例子來說下全局變量

lua_getglobal()的作用就是把lua中全局變量的值壓入棧

lua_getglobal(L, "z");

z = (int)lua_tonumber(L, 1);

lua_pop(L, 1);

假設Lua程序中定義了一個全局變量z, 這段小程序就是把z的值取出放入C的變量z中.

另外Lua中還有一個對應的函數lua_setglobal(), 作用是用棧頂的值填充指定的全局變量

lua_pushnumber(L, 10);

lua_setglobal(L, "z");

例如這段小程序就是把lua中的全局變量z設為10, 如果lua中未定義z的話, 就會自動創建一個

全局變量z并設為10.

“C/C++中怎么用Lua函數”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!

網頁題目:C/C++中怎么用Lua函數
本文鏈接:http://vcdvsql.cn/article38/pdehpp.html

成都網站建設公司_創新互聯,為您提供電子商務網站維護域名注冊定制網站靜態網站App開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營