lua c/c++ 交互 基础
生活随笔
收集整理的這篇文章主要介紹了
lua c/c++ 交互 基础
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
來源于http://wenku.baidu.com/view/53e0b503763231126edb113c.html
按照示例代碼測試了一下可行。
function.lua如下:
c/c++程序如下: #include <stdio.h>extern "C" //如果文件后綴為.c, 則去掉extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" }/* Lua解釋器指針 */ lua_State* L;//call func in lua script.... int luaadd(int x, int y) {int sum;lua_getglobal(L, "add");lua_pushnumber(L, x);lua_pushnumber(L, y);lua_call(L, 2, 1); //2個參數, 1個返回值sum = (int)lua_tonumber(L, -1);lua_pop(L, 1);return sum; }//get && set global var in lua script int luagetglobalv(char *z) {int v;lua_getglobal(L, z);v = (int)lua_tonumber(L, 1);lua_pop(L, 1);return v; }int luasetglobalv(char *z, int newv) {lua_pushnumber(L, newv);lua_setglobal(L, z);return 0; }//call c/c++ func from lua script static int average(lua_State *L) {int n = lua_gettop(L);double sum = 0;int i;for(i = 1; i <= n; i++){if(!lua_isnumber(L, i)){lua_pushstring(L, "incorrect arg for average");lua_error(L);return 1; !!!!!!!!!!這里彈棧不正確。。。 暫時還不清楚到底該怎么彈。。}sum += lua_tonumber(L, i);}lua_pushnumber(L, sum/n);lua_pushnumber(L, sum);return 2; //return num of results }int main ( int argc, char *argv[] ) {/* 初始化Lua */L = lua_open();/* 載入Lua基本庫 */luaL_openlibs(L);/* 運行腳本 */lua_register(L, "average", average);luaL_dofile(L, "C:\\Users\\xx\\Documents\\lua\\function.lua");int sum = luaadd(10, 15);printf("add result is :%u, z:%u, b:%u\n", sum, luagetglobalv("z"), luagetglobalv("b"));luasetglobalv("z", 102);printf("cur value of z:%u\n", luagetglobalv("z"));/* 清除Lua */lua_close(L);/* 暫停 */printf( "Press enter to exit…" );getchar();return 0; }
總結
以上是生活随笔為你收集整理的lua c/c++ 交互 基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wofstream写中文失败,导致str
- 下一篇: google gperf tool【cp