如何编写lua扩展

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!");

你可能感兴趣的:(lua)