文章目录
为什么要生成dll?
https://www.lua.org/manual/5.4/readme.html 官网中有这么一段话, 意思是Windows平台建议生成dll, 而不是静态库,但是为什么有这个建议呢? 直接看第五节
一、下载lua源码并解压
https://github.com/lua/lua/releases
二、打开Visual Studio 2017创建一个空的项目
三、导入资源文件
解决方案资源管理器>>资源文件>>右键添加>>现有项>>选择解压好的lua源码
四、移除lua.c和luac.c文件(可选操作)
解决方案资源管理器>>资源文件>>找到lua.c文件>> 右键移除
五、添加预处理宏
右键解决方案>>属性>>C/C++>>预处理器>>预处理器定义>>在最前面添加LUA_BUILD_AS_DLL;
Q1: 这里我们为什么要添加预处理宏呢?
因为luaconf.h文件中,有这么一段:
#if defined(LUA_BUILD_AS_DLL) /* { */
#if defined(LUA_CORE) || defined(LUA_LIB) /* { */
#define LUA_API __declspec(dllexport)
#else /* }{ */
#define LUA_API __declspec(dllimport)
#endif /* } */
#else /* }{ */
#define LUA_API extern
#endif /* } */
Q2: 那么 __declspec(dllexport) 有什么作用呢?
其作用是导出函数到dll中,给接口提供一个外部调用方式,能够使程序在没有导入lib库时, 通过dll动态调用。
也就是说导出的dll如果没有 __declspec(dllexport) 符号就算是导出失败
Q3: 如何查看导出的dll是不是坏的
VS 提供了一个工具:bumpbin , 用VS自带的命令行打开即可
dumpbin /exports xxx.dll
结果如下:
六、选择生成dll模式
右键解决方案>>属性>>常规>>项目默认值>>配置类型选择dll