簡單的在C++裡頭與Lua交互操作

首先提供 Lua 的簡單範例

 print(" Lua 2019/01/07 !!!")

 -- Variable
monster_type = "Ghost"
blood = 99.9 -- Table
x_table = {, , } -- Function
function f(var)
return var * var + * var +
end

呼叫變數的辦法

 int main(int argc, const char *argv[])
{
string scriptnema = "main.lua";
int luaError;
lua_State *L = luaL_newstate(); if (L == NULL)
{
cout << "luaL_newstate faile !!!" << endl;
return -;
} luaL_openlibs(L);
// first getbloable parameter that it will be first on the stack.
// stack index number will follow small to large [1 ... 5] or [-5 ... -1]
lua_getglobal(L, "blood");
lua_getglobal(L, "monster_type"); double blood = lua_tonumber(L, ); // index = 1 or -2
string type = lua_tostring(L, ); // index = -1 or 2 cout << "blood = " << blood << endl;
cout << "monster_typa = " << type.c_str() << endl; }

呼教 table的方式

 int main(int argc, const char *argv[])
{
//cout << "lua test platform!!!" << endl;
string scriptnema = "main.lua";
int luaError;
lua_State *L = luaL_newstate(); if (L == NULL)
{
cout << "luaL_newstate faile !!!" << endl;
return -;
} luaL_openlibs(L);
luaL_dofile(L, scriptnema.c_str()); lua_getglobal(L, "x_table");
lua_Integer array_len = luaL_len(L, -);
cout << "array_len = " << array_len << endl; for (int i = ; i > ; i--){
lua_rawgeti(L, -, i); // lua_rawgeti(lua stack, index, value)
cout << lua_tonumber(L, -) << endl;
lua_pop(L, );
}
}

在 C++ 輸入變數給 Lua 且 return 結果

 int luaf(lua_State *L){
double sum;
lua_getglobal(L, "f"); lua_pushnumber(L, ); lua_call(L, , ); // lua_call(lua stack, input num, output num) sum = (int)lua_tonumber(L, ); lua_pop(L, ); return sum;
} int main(int argc, const char *argv[])
{
//cout << "lua test platform!!!" << endl;
string scriptnema = "main.lua";
int luaError;
lua_State *L = luaL_newstate(); if (L == NULL)
{
cout << "luaL_newstate faile !!!" << endl;
return -;
} luaL_openlibs(L);
luaL_dofile(L, scriptnema.c_str()); cout << luaf(L) << endl;
lua_close(L);
system("pause");
}

以上是 Lua --> Stack 基本API應用,希望最後是把所有的API都玩過一遍。

這樣之後學習與應用時可以更加靈活

(Lua) C++ 呼叫 Lua 的變數、函式的更多相关文章

  1. 学JS的心路历程 -函式(三)this

    this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...

  2. 学习JS的心路历程-函式(一)

    前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...

  3. (Lua) C++ 加入 Lua 環境擴充應用強度

    Lua 在網上有非常多的介紹,就是一個小而巧的語言,可以放入嵌入式系統 也可以在一般的應用上非常強大,這邊主要記錄如何讓Lua加入C++裡頭應用 Lua source code 是以 C 語言下去編寫 ...

  4. t100 常用公用變數

    g_enterprise 目前的企業代碼,將限制使用者所能閱讀的資料內容g_prog 目前執行的作業編號,用於變換畫面顯示資料與產生系統資訊,不可變更g_code 目前執行的程式代碼(4gl)名稱,不 ...

  5. Lua 架构 The Lua Architecture

    转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间 ...

  6. vJine 第三波 之 Lua 来袭 vJine.Lua

    vJine.Lua vJine.Lua是Lua语言的C#封装库,可实现通过C#直接运行Lua脚本并与Lua脚本交互的功能. 1. 授权: MPL2.0 相关资源: nuget:(https://www ...

  7. VC和VS调用Lua设置以及Lua C API使用。

    通过c++调用lua 脚本,    环境VC++6.0    lua  sdk 5.1.4 在调用前先认识几个函数.1.调用lua_open()将创建一个指向Lua解释器的指针.2. luaL_ope ...

  8. keil c51 本變數型態(Variable Type)

    本變數型態(Variable Type): 類 別 符號位元 位元組(bytes) 表 示 法 數 值 範 圍 整 數 有 2 int(short) -32768~0~>32767 4 long ...

  9. lua调用不同lua文件中的函数

    a.lua和b.lua在同一个目录下 a.lua调用b.lua中的test方法,注意b中test的写法 _M 和 a中调用方法: b.lua local _M = {}function _M.test ...

随机推荐

  1. oracle删除表空间下所有的表

    SELECT 'DROP TABLE ' || TABLE_NAME || ' CASCADE CONSTRAINTS' V_NAME FROM DBA_TABLES WHERE TABLESPACE ...

  2. 从iOS 11 UI Kit中谈谈iOS 11的新变化

    北京时间9月20日凌晨1点,iOS 11终于迎来了正式版的推送,相信各位小伙伴已经在第一时间进行了升级.iOS 11毫无疑问是一次大规模的系统更新,UI.系统内核.锁屏等多方面都进行了不同程度的改进. ...

  3. 斜杠反斜杠,去空格\xa0,连接函数join()

    1斜杠反斜杠 斜杠:/.反斜杠:\. 反斜杠\,在windows系统中用来表示目录. 而在unix系统中,/表示目录.由于web遵循unix命名,所以在网址(URL)中,/表示目录. 在unix系统中 ...

  4. Redis通用命令(七)

    Keys的通用操作: (1)获得所有的keyskeys *(2)查看my开头的keykeys my?(3)删除keydel key1 key2(4)key是否存在exists key1 exists ...

  5. Gym 101201H Paint (离散化+DP)

    题意:给定 n 个区间,让你选出一些,使得每个选出区间不交叉,并且覆盖区间最大. 析:最容易想到的先是离散化,然后最先想到的就是 O(n^2)的复杂度,dp[i] = max(dp[j] + a[i] ...

  6. String 、 StringBuffer 和 StringBuilder

    StringBuffer (一个线程安全的可变字符串序列,用于多线程) A thread-safe, mutable sequence of characters. StringBuilder (可变 ...

  7. swift学习之UIButton

    // //  ViewController.swift //  button // //  Created by su on 15/12/7. //  Copyright © 2015年 tian. ...

  8. Java下的框架编程(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)

    Java 虽然没有动态语言般暴起,但仍然天连天,水接水的生出好多框架技术---反射(reflection),泛型(generics),元数据(annotation),proxies(proxy/cgl ...

  9. 生成Webservice的两种方式(Axis2,CXf2.x)

    一天之中,用了各种方式生成webservice,就是为了node.js能和程序顺利通信.最终还是用axis2成功了.工作基本完成了,现在可以总结一下. 关于生成方式,推荐使用eclipse,比较方便, ...

  10. 推荐两款国人开发的html前段框架

    1.http://www.h-ui.net/  H-ui前端框架官方网站 2.http://www.builive.com/  BUI是基于JQuery的富客户端UI框架