LUAとCの相互作用(の使用)

(1)LUAプログラム

 

(2)C ++プログラム(ヘッダ)

extern "C"
{
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
};クラスCLuaFn
{パブリック:
    CLuaFn(無効)。
    〜CLuaFn(無効)。
    
    空のInit(); //オブジェクトポインタパラメータのLuaを初期化します
    空クローズ(); //閉じるオブジェクトのポインタのLua
 
    BOOL LoadLuaFile(のconstのchar * pFileName); //指定されたファイルを読み込むのLua
    BOOL CallFileFn(のconstのchar * pFunctionName、int型nParam1、int型nParam2); //関数で指定されたプライベートLuaのファイルを実行します。
    lua_State * m_pState; //これは国家のLuaのオブジェクトポインタである、あなたはLuaのファイルに対応することができます
}。

 

(3)C ++プログラム(.cppファイル)

 

#include "CLuaFn.h"
 
CLuaFn :: CLuaFn(無効){m_pState = NULL;}; //やっフレーズ
CLuaFn ::〜CLuaFn(ボイド){}。
//初期化関数のボイドCLuaFn ::初期化()
{
    もし(NULL == m_pState)
    {
        m_pState = lua_open(); //オブジェクトのLUAへのポインタを返します。
        luaL_openlibs(m_pState); //は、あなたが使用する可能性のあるすべての基本的なLuaのライブラリをロード}
}
)//近いとLuaが無効CLuaFnオブジェクト::閉じる(リソースを解放
{
    (NULL!= m_pState)の場合
    {
        lua_close(m_pState)。
        m_pState = NULL;
    }
}
BOOL CLuaFn :: LoadLuaFile(のconstのchar * pFileName)
{
    nRet int型= 0;
    もし(NULL == m_pState)
    {
        printf( "[CLuaFn :: LoadLuaFile] m_pStateがNULL./nです")。
        falseを返します。
    }
    試みは、プログラムの初期化を配置するとき//ファイルを読み込みます
    nRet = luaL_dofile(m_pState、pFileName)。
    (nRet!= 0)の場合
    {
        printf(pFileName、nRet、(m_pState、-1)lua_tostring "[CLuaFn :: LoadLuaFile] luaL_loadfile(%s)は、ファイル(%d)が(%S)./ nが")。
        falseを返します。
    }
    trueを返します。
}
BOOL CLuaFn :: CallFileFn(のconstのchar * pFunctionName、int型nParam1、int型nParam2)
{
    nRet int型= 0;
    もし(NULL == m_pState)
    {
        printf( "[CLuaFn :: CallFileFn] m_pStateがNULL./nです")。
        falseを返します。
    }
    //現在のLUAファイルおよび機能位置lua_getglobal(m_pState、pFunctionName)へのポインタをロードするかどうか、あなたのLuaの機能を検証します。
 
    //プッシュ(配列:左パラメータ):第1のパラメータlua_pushnumber(m_pState、nParam1)。
    //プッシュ:第2のパラメータlua_pushnumber(m_pState、nParam2)を、
    //この関数が実行され、2は入力パラメータの数であり、戻り値は、数1であります
    nRet = lua_pcall(m_pState、2、1、0);
    (nRet!= 0)の場合
    {
        printf( "[CLuaFn :: CallFileFn】通話機能(%S)エラー(%d)は./ N"、pFunctionName、nRet)。
        falseを返します。
    }
    IF(lua_isnumber(m_pState、-1)== 1)
    {
        -ēnsumuslua_tonumber = INT(m_pState、-1)。
        printf( "[CLuaFn :: CallFileFn] I =%のD / N"、-ēnsumus)。
    }
    trueを返します。
}

 

(4)C ++プログラム(メインファイル)

 

#include "CLuaFn.h" INTメイン(int型ARGC、CHAR * ARGV [])
{
    CLuaFn LuaFn;
    LuaFn.Init();
    LuaFn.LoadLuaFile( "Sample.lua");
    LuaFn.CallFileFn( "func_Add"、11、12)。
    getchar関数();
 
    0を返します。
}

 

注意:このプログラムは非常に詳細なメモは、私はコードを説明するためにここにいないよされています。ダウンロードしてインストールLUA後、VS2010で私はまた、適切なライブラリを紹介したいと思います。次のようにショットは、以下のとおりです。

 

おすすめ

転載: www.cnblogs.com/gd-luojialin/p/10962844.html