// 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

好吧,你们应该看到效果了