// lualib.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "lua.hpp"
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
static int MyLuaDLL_HelloWorld(lua_State* L)
{
MessageBox(NULL,"Hello","World",MB_OK);
return 0;
}
static int MyLuaDLL_average(lua_State *L)
{
int n = lua_gettop(L);
double sum = 0;
int i;
for (i = 1; i <= n; i++)
{
sum += lua_tonumber(L, i);
}
lua_pushnumber(L, sum / n);
lua_pushnumber(L, sum);
return 2;
}
static const luaL_reg MyLuaDLLFunctions [] =
{
{"HelloWorld",MyLuaDLL_HelloWorld},
{"average",MyLuaDLL_average},
{NULL, NULL}
};
extern "C" __declspec(dllexport) int luaopen_MyLuaDLL(lua_State* L)
{
luaL_register(L, "MyLuaDLL", MyLuaDLLFunctions);
return 1;
}
C++ 代码如上,在VS的C++库路径加入你安装的lua包含头文件路径.即
#include "lua.hpp"
extern
"C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
这段头文件位置.
还有记得引入lua 文件夹的静态库,我的是lua5.1.lib
lua文件test.lua
local testlib = package.loadlib("lualib.dll","luaopen_MyLuaDLL"); --获取DLL中抛出函数地址
print (testlib)
if(testlib)then
testlib(); --调用DLL中抛出函数
else
-- Error
end
MyLuaDLL.HelloWorld();
a,b=MyLuaDLL.average(23,33,3344);
print("average:",a,"sum:",b);
把编译好的DLL跟lua文件放在一起控制台下执行lua文件就可以看到效果了
控制台下:lua test.lua
好吧,你们应该看到效果了
转载于:https://blog.51cto.com/1433795/1310702