(1)lua程序

(2)C++程序(头文件)

extern "C"
{
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
};class CLuaFn
{public:
    CLuaFn(void);
    ~CLuaFn(void);
    
    void Init();    //初始化Lua对象指针参数
    void Close();    //关闭Lua对象指针
 
    bool LoadLuaFile(const char* pFileName);    //加载指定的Lua文件
    bool CallFileFn(const char* pFunctionName, int nParam1, int nParam2);        //执行指定Lua文件中的函数private:
    lua_State* m_pState;    //这个是Lua的State对象指针,你可以一个Lua文件对应一个
};

(3)C++程序(.cpp文件)

#include "CLuaFn.h"
 
CLuaFn::CLuaFn(void){m_pState = NULL;};        //这句干嘛
CLuaFn::~CLuaFn(void){};
//初始化函数void CLuaFn::Init()
{
    if (NULL == m_pState)
    {
        m_pState = lua_open();    //返回一个lua对象指针
        luaL_openlibs(m_pState);    //加载了所有你可能用到的Lua基本库    }
}
//关闭Lua对象并释放资源void CLuaFn::Close()
{
    if(NULL != m_pState)
    {
        lua_close(m_pState);
        m_pState = NULL;
    }
}
bool CLuaFn::LoadLuaFile(const char* pFileName)
{
    int nRet = 0;
    if (NULL == m_pState)
    {
        printf("[CLuaFn::LoadLuaFile]m_pState is NULL./n");
        return false;
    }
    //加载文件的时候尽量放在程序的初始化中
    nRet = luaL_dofile(m_pState, pFileName);
    if (nRet != 0)
    {
        printf("[CLuaFn::LoadLuaFile]luaL_loadfile(%s) is file(%d)(%s)./n", pFileName, nRet, lua_tostring(m_pState, -1));
        return false;
    }
    return true;
}
bool CLuaFn::CallFileFn(const char* pFunctionName, int nParam1, int nParam2)
{
    int nRet = 0;
    if (NULL == m_pState)
    {
        printf("[CLuaFn::CallFileFn]m_pState is NULL./n");
        return false;
    }
    //验证你的Lua函数是否在你当前加载的Lua文件中,并把指针指向这个函数位置    lua_getglobal(m_pState, pFunctionName);
 
    // 压栈(顺序:从左到右的参数):第一个参数    lua_pushnumber(m_pState, nParam1);
    // 压栈:第二个参数    lua_pushnumber(m_pState, nParam2);
    //执行这个函数,2是输入参数的个数,1是返回值的个数
    nRet = lua_pcall(m_pState, 2, 1, 0);
    if (nRet != 0)
    {
        printf("[CLuaFn::CallFileFn]call function(%s) error(%d)./n", pFunctionName, nRet);
        return false;
    }
    if (lua_isnumber(m_pState, -1) == 1)
    {
        int nSum = lua_tonumber(m_pState, -1);
        printf("[CLuaFn::CallFileFn]Sum = %d./n", nSum);
    }
    return true;
}

(4)C++程序(main文件)

#include "CLuaFn.h"int main(int argc, char* argv[])
{
    CLuaFn LuaFn;
    LuaFn.Init();
    LuaFn.LoadLuaFile("Sample.lua");
    LuaFn.CallFileFn("func_Add", 11, 12);
    getchar();
 
    return 0;
}

注:程序中的注释已经很详尽,这里不在对代码进行解释。下载安装lua之后,在vs2010中还要引入相应的库。截图如下:

最新文章

  1. 如何使用 Entity Framework 构造动态查询表达式
  2. C# 委托和事件(一):最简单的委托和事件
  3. zabbix通过curl命令判断web服务是否正常并自动重启服务
  4. C语言itoa()函数和atoi()函数详解(整数转字符C实现)
  5. 简单sql操作
  6. Win7快捷方式图标不显示解决办法
  7. [Nginx 2] form表单提交,图片上传
  8. plsql的参数IN和OUT
  9. CakePHP的blog教程三
  10. 使用ecshop电子商务系统的100个小问题
  11. Linux内存管理之slab分配器
  12. SectionIndexer 利用系统的控件,制作比较美观的侧栏索引控件
  13. Centos6.7下面配置vim及其插件
  14. apache httpd.conf
  15. ABS PBT POM材质键冒
  16. keras与tensorboard结合使用
  17. javascript进阶笔记(1)
  18. CentOS 5.x 键盘布局改为日语
  19. 114ic电子元器件网
  20. Python模块之shelve

热门文章

  1. springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结
  2. vue实战教程
  3. OUC_Summer Training_ DIV2_#2之解题策略 715
  4. LeetCode 146. LRU缓存机制(LRU Cache)
  5. 记一个微信支付-1错误JSAPI缺少参数app|get_brand_request:Fail
  6. 快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题
  7. [Kerberos] Kerberos教程(一)
  8. 记一次ceph集群的严重故障 (转)
  9. python3.7与pyspider的坑
  10. Ubuntu配置zsh