锘?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
銆銆鎴戜滑鍦↙uaWithCPPTest欏圭洰涓嬶紝鏌ョ湅Source.cpp浠g爜濡備笅錛?/span>
銆銆#include <iostream>
銆銆#include <fstream>
銆銆#include <string>
銆銆using namespace std;
銆銆extern "C"
銆銆{
銆銆#include <lua.h>
銆銆#include <lauxlib.h>
銆銆#include <lualib.h>
銆銆};
銆銆void TestLua();
銆銆int main()
銆銆{
銆銆TestLua();
銆銆return 0;
銆銆}
銆銆void TestLua()
銆銆{
銆銆lua_State *L = luaL_newstate();
銆銆luaopen_base(L); //
銆銆luaopen_table(L); //
銆銆luaopen_package(L); //
銆銆luaopen_io(L); //
銆銆luaopen_string(L); //
銆銆luaL_openlibs(L); //鎵撳紑浠ヤ笂鎵鏈夌殑lib
銆銆string str;
銆銆while (true)
銆銆{
銆銆cout << "璇瘋緭鍏ua浠g爜:" << endl;
銆銆getline(cin, str, '\n');
銆銆if (luaL_loadstring(L, str.c_str())
銆銆|| lua_pcall(L, 0, 0, 0) )
銆銆{
銆銆const char * error = lua_tostring(L, -1) ;
銆銆cout << string(error) << endl;
銆銆}
銆銆}
銆銆lua_close(L);
銆銆}
銆銆鍏朵腑錛岃extern "C"鍖呰搗鏉ョ殑鏄痩ua鐨勪富瑕佸嚱鏁扮殑澹版槑銆傚湪C++涓紝姣忎釜宓屽叆鐨刲ua鐨勭敓鍛藉懆鏈熶笌鍚勮嚜鐨刲ua_State瀵硅薄涓涓瀵瑰簲銆傞氳繃luaL_newstate()鏂規硶錛屾垜浠究鍒涘緩浜嗕竴涓猯ua瑙i噴鍣ㄣ傞殢鍚庣殑鍑犱釜luaopen_*鏂規硶錛岄兘鏄幏鍙栫浉搴攍ua搴撶殑浣跨敤鏉冿紝鏈鍚庨氳繃luaL_openlibs鎵撳紑鎵鏈夌殑鏈変嬌鐢ㄦ潈鐨刲ua鏍囧噯搴撱備竴鍒囧噯澶囧氨緇悗錛屾垜浠紑濮嬫帴鏀惰緭鍏ャ?/span>
銆銆image
銆銆image
銆銆image
銆銆鎴戜滑閫氳繃luaL_loadstring錛屽皢鎵鏈変唬鐮佽鍏ua錛屽茍涓旀鏌ヤ唬鐮佹槸鍚︽湁璇硶閿欒銆傜劧鍚庨氳繃lua_pcall錛岃繍琛屼唬鐮侊紝灝嗘墍鏈夌殑鍏ㄥ眬鍙橀噺淇濆瓨鍦╛G涓傞氳繃璇誨彇銆佽繍琛岃繖涓ゆ錛屾垜浠氨寤虹珛璧蜂竴涓嚜宸辯殑lua瑙i噴鍣ㄤ簡銆?/span>
銆銆灝唋ua浣滀負閰嶇疆鏂囦歡
銆銆浠庢枃浠惰鍙杔ua浠g爜錛屾祦紼嬩笌涔嬪墠鐨勭ず渚嬩竴鏍鳳紝浠呮槸灝唋uaL_loadstring()鎹㈡垚luaL_loadfile()鍗沖彲銆備唬鐮佸涓嬶細
銆銆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;
銆銆return;
銆銆}
銆銆}
銆銆image
銆銆image
銆銆鐜板湪錛屾垜浠湪lua涓畾涔夊彉閲忥紝騫朵笖璧嬪箋傜劧鍚庡湪c++涓彇鍊鹼紝榪愮畻鍑虹粨鏋溿傚湪lua鏂囦歡涓紝鍐呭濡備笅錛?/span>
銆銆image
銆銆鍦╟++涓紝鎴戜滑鑾峰彇a錛宐涓や釜鍙橀噺鐨勫鹼紝鐒跺悗鐩稿姞錛岀畻鍑虹粨鏋滐細
銆銆#include <iostream>
銆銆#include <fstream>
銆銆#include <string>
銆銆using namespace std;
銆銆extern "C"
銆銆{
銆銆#include <lua.h>
銆銆#include <lauxlib.h>
銆銆#include <lualib.h>
銆銆};
銆銆void TestLua();
銆銆int main()
銆銆{
銆銆TestLua();
銆銆return 0;
銆銆}
銆銆void TestLua()
銆銆{
銆銆lua_State *L = luaL_newstate();
銆銆luaopen_base(L); //
銆銆luaopen_table(L); //
銆銆luaopen_package(L); //
銆銆luaopen_io(L); //
銆銆luaopen_string(L); //
銆銆luaL_openlibs(L); //鎵撳紑浠ヤ笂鎵鏈夌殑lib
銆銆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;
銆銆return;
銆銆}
銆銆else
銆銆{
銆銆break;
銆銆}
銆銆}
銆銆int a = 0;
銆銆int b = 0;
銆銆// 鑾峰彇a鐨勫?/span>
銆銆lua_getglobal(L, "a");
銆銆if (!lua_isnumber(L, -1))
銆銆{
銆銆cout << "-2 error" << lua_isnumber(L, -1) << lua_isnumber(L, -1) << endl;
銆銆return ;
銆銆}
銆銆a = lua_tonumber(L, -1);
銆銆// 鑾峰彇b鐨勫?/span>
銆銆lua_getglobal(L, "b");
銆銆if (!lua_isnumber(L, -1))
銆銆{
銆銆cout << "-1 error" << endl;
銆銆return ;
銆銆}
銆銆b = lua_tonumber(L, -1);
銆銆cout << "a = " << a << " b = " << b << endl;
銆銆cout << "a + b = " << a + b << endl;
銆銆lua_close(L);
銆銆}