(Lua) C++ 呼叫 Lua 的變數、函式
簡單的在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 的變數、函式的更多相关文章
- 学JS的心路历程 -函式(三)this
this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...
- 学习JS的心路历程-函式(一)
前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...
- (Lua) C++ 加入 Lua 環境擴充應用強度
Lua 在網上有非常多的介紹,就是一個小而巧的語言,可以放入嵌入式系統 也可以在一般的應用上非常強大,這邊主要記錄如何讓Lua加入C++裡頭應用 Lua source code 是以 C 語言下去編寫 ...
- t100 常用公用變數
g_enterprise 目前的企業代碼,將限制使用者所能閱讀的資料內容g_prog 目前執行的作業編號,用於變換畫面顯示資料與產生系統資訊,不可變更g_code 目前執行的程式代碼(4gl)名稱,不 ...
- Lua 架构 The Lua Architecture
转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间 ...
- vJine 第三波 之 Lua 来袭 vJine.Lua
vJine.Lua vJine.Lua是Lua语言的C#封装库,可实现通过C#直接运行Lua脚本并与Lua脚本交互的功能. 1. 授权: MPL2.0 相关资源: nuget:(https://www ...
- VC和VS调用Lua设置以及Lua C API使用。
通过c++调用lua 脚本, 环境VC++6.0 lua sdk 5.1.4 在调用前先认识几个函数.1.调用lua_open()将创建一个指向Lua解释器的指针.2. luaL_ope ...
- keil c51 本變數型態(Variable Type)
本變數型態(Variable Type): 類 別 符號位元 位元組(bytes) 表 示 法 數 值 範 圍 整 數 有 2 int(short) -32768~0~>32767 4 long ...
- lua调用不同lua文件中的函数
a.lua和b.lua在同一个目录下 a.lua调用b.lua中的test方法,注意b中test的写法 _M 和 a中调用方法: b.lua local _M = {}function _M.test ...
随机推荐
- sql添加/移除约束
唯一:ALTER TABLE TableName ADD CONSTRAINT UQ_NickName UNIQUE(NickName) 主键:ALTER TABLE TableName ADD CO ...
- ThinkCMF框架使用 - 如何创建应用 -1
.应用就是application目录下的一个模块,它是独立于其它模块存在的,有自己独立的运行空间: .应用采用MVC的结构: .拿Blog应用举例: Blog Controller 控制器目录(必备) ...
- [Jenkins]执行SoapUI脚本,怎样在邮件内容里面嵌入html
在Editable Email Notification的Default Content里面加入这样一段: ${FILE,path="result-output/overview-summa ...
- Greeplum 系列(一) Greenplum 架构
Greeplum 系列(一) Greenplum 架构 Greenplum 可进行海量并行处理 (Massively Parallel Processing) 一.Greenplum 体系架构 Gre ...
- android Service 的简单使用(转)
1.要使用Service,首先就是在配置文件里吗添加Service,如果不填加,你的Service是不能够使用的.目前学到的方法有两种 方法一:<service android:enabl ...
- 使用JFinal框架连接数据库,实现注册、登录功能
使用JFinal框架连接数据库,实现注册.登录功能 1.在Eclipse中新建Dynamic Web project项目 2.导入jfinal-2.2-bin-with-src.jar.c3p0-0. ...
- (字符串 KMP)Blue Jeans -- POJ -- 3080:
链接: http://poj.org/problem?id=3080 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...
- javascript 深度克隆
关键词 :递归 主要分为 数组 .对象.以及基本类型 function clone(Obj) { var buf; if (Obj instanceof Arr ...
- ZOJ2256 Mincost 2017-04-16 19:36 44人阅读 评论(0) 收藏
Mincost Time Limit: 2 Seconds Memory Limit: 65536 KB The cost of taking a taxi in Hangzhou is n ...
- HDU1875 畅通工程再续 2017-04-12 19:52 48人阅读 评论(0) 收藏
畅通工程再续 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...