在用VS的C++开发dll的过程中,为了使暴露函数清楚明了,一般采用Def文件来写明暴露函数名称。
Def文件一般格式如下:
; ***.def : 声明 DLL 的模块参数。
LIBRARY “***”
EXPORTS
; 此处可以是显式导出
Fun1 @1
Fun2 @2
Fun3 @3
***一般代表dll文件名称。首行中; ***.def,可以任意写名称。第三行 LIBRARY “***”的名称却不可随意乱写。一定要与dll名称相同,且不用写dll或lib尾缀。
其实,LIBRARY后是可以写尾缀的。在一种情况下还必须写尾缀:那就是有“.”的情况下,如dll名称为:ABCv2.1,如果在DEF文件中写成:LIBRARY “ABCv2.1”,那么恭喜你,调试程序时,会提示,找不到ABCv2.1文件。微软将“.1”当作了尾缀,这种情况有两种解决办法。
- 将DEF文件中的第三行,改写为LIBRARY “ABCv2.1.dll”
- 直接去掉LIBRARY后的库名称。
推荐第2种,这样无论是D版或R版,都不用再改文件了。不过,在有的版本编译器中,不写库名称是不能通过的,那就请使用第一种。