新建DLL空的win32工程,新建test.cpp文件,内容如下
/*Lua调用C/C++函数/库(动态链接方式)*/ #include<iostream> using namespace std; #include<lua.hpp> static int math_abs(lua_State *L) { lua_pushnumber(L, abs((int)luaL_checknumber(L, 1))); return 1; } static int math_cos(lua_State *L) { lua_pushnumber(L, cos((double)luaL_checknumber(L, 1))); return 1; } static int math_sin(lua_State *L) { lua_pushnumber(L, sin((double)luaL_checknumber(L, 1))); return 1; } static const luaL_reg mathlib[] = { { "abs", math_abs }, { "cos", math_cos }, { "sin", math_sin }, { NULL, NULL } }; //dll通过函数luaI_openlib导出,然后lua使用package.loadlib导入库函数 extern "C" __declspec(dllexport) int LuaAPIDLL(lua_State* L)//需要注意的地方,此函数命名与库名一致 { luaI_openlib(L,"DY_MATH",mathlib,0); return 1; }
lualoadlib.lua文件
--region lualoadlib.lua local libpath="./../Debug/LuaAPIDLL.dll" local loadlibfunc=package.loadlib(libpath,"LuaAPIDLL") loadlibfunc() function COS(a) print("called COS in lua script") return DY_MATH.cos(a) end function SIN(a) print("called SIN in lua script") return DY_MATH.sin(a) end print(COS(60*3.1415926/180)) print(SIN(30)) os.execute("pause") --直接双击此文件,cmd窗口不会消失 --endregion
直接双击lualoadlib.lua文件,结果如下
时间: 2024-10-16 20:04:36