DLL部分:
#ifdef __cplusplus extern "C" { #endif #include <lua/lua.h> #include <lua/lualib.h> #include <lua/lauxlib.h> #ifdef __cplusplus } #endif #pragma comment( lib, "lua51.lib" ) #define TOSTRING(x) #x #define EXPORT_SYMBOL_TO_LUA(str) { TOSTRING(str), str } static int MsgBox(lua_State* L) { const char* pStr = lua_tostring(L, -1); MessageBoxA( NULL, pStr, "message", MB_OK ); return 0; } static const luaL_reg MyDLLFunctions [] = { EXPORT_SYMBOL_TO_LUA(MsgBox), {NULL, NULL} }; //需要注意的地方,此函数命名与库名一致 extern "C" int __declspec(dllexport) luaopen_DllForLua(lua_State* L) { luaL_openlib(L, "MyExt", MyDLLFunctions, 0); return 1; }
Lua调用部分:
n = 1; if n == 1 then --加载方法一 local lib = package.loadlib("./Debug/DllForLua.dll", "luaopen_DllForLua"); if lib then lib() --需要注意的地方 else print("Load Dll Error!"); end
elseif n == 2 then --加载方法二 package.cpath = string.format("%s;./Debug/?.dll", package.cpath); require("DllForLua") end MyExt.MsgBox("Everything is OK!");