导航:[首页]->[lua]->[Tolua++入门]

#源码组织 ##头文件

  1. tolua++.h

##tolua++.lib 或者 tolua++.dll

  1. tolua_event.c
  2. tolua_event.h
  3. tolua_is.c
  4. tolua_map.c
  5. tolua_push.c
  6. tolua_to.c

##tolua++.exe

  1. tolua.c
  2. toluabind.c
  3. toluabind.h
  4. toluabind_default.c
  5. toluabind_default.h

  • 头文件需要被其他使用tolua++的程序引用
  • lib/dll需要被其他使用tolua++的程序链接
  • exe将pkg文件转换成c/c++文件
  • 编译lib/dll/exe需要连接lua库和lua头文件

#导出Dll dll中必须导出一个luaopen_$(库名称)的函数,例如下面的代码导出一个名为sd的库

    extern "C"{
    #include "lua.h"
    }
    #include "tolua++.h"
    ///////////////////////////////////////////////////////////////
    // 导出dll需要
    // 这个函数是Lua库的初始化函数,由tolua++自动生成
    TOLUA_API int tolua_sd_open (lua_State* tolua_S);

    extern "C" __declspec(dllexport) 
    int luaopen_sd(lua_State *tolua_S){
        return tolua_sd_open(tolua_S);
    }

#Exe初始化lua库 extern “C”{ #include “lua.h” #include “lualib.h” #include “lauxlib.h” } #include “tolua++.h” // 这个函数是Lua库的初始化函数,有tolua++自动生成 TOLUA_API int tolua_sd_open (lua_State* tolua_S);

    int main(){
        lua_State* L = lua_open();
        if(!L)
            return 1;
        luaL_openlibs(L);

        // 在这里初始化 需要导出的库
        if(!tolua_sd_open(L))
            return 1;

        // 在C/C++ 内部调用lua脚本
        luaL_dofile(L,"sd.lua");
        lua_close(L);

        return 0;
    }

#参考