模块定义(.def)文件说明
2010-12-25 23:12
330 查看
MSDN中的名词解释
模块定义 (.def) 文件为链接器提供有关被链接程序的导出、属性及其他方面的信息。生成 DLL 时,.def 文件最有用。由于存在可代替模块定义语句使用的链接器选项
,通常不需要 .def 文件。也可以将 __declspec(dllexport)
用作指定导出函数的手段。在链接器阶段可以使用 /DEF(指定模块定义文件)
链接器选项调用 .def 文件。
如果生成的 .exe 文件没有导出,使用 .def 文件将使输出文件较大并降低加载速度。
通俗解释:
在
VC++中,生成DLL可以不使用.def文件。只需要在VC++的函数定义前要加__declspec(dllexport)修饰就可以了。但是使用
__declspec(dllexport)和使用.def文件是有区别的。如果DLL是提供给VC++用户使用的,你只需要把编译DLL时产生
的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果你的DLL是供其他程序如VB、delphi,以及.NET
用户使用的,那么会产生一个小麻烦。因为VC++对于__declspec(dllexport)声明的函数会进行名称转换,如下面的函数:
__declspec(dllexport) int __stdcall IsWinNT()
会转换为IsWinNT@0,这样你在VB中必须这样声明:
Declare Function IsWinNT Lib "my.dll" Alias "IsWinNT@0" () As Long
@的后面的数由于参数类型不同而可能不同。这显然不太方便。所以如果要想避免这种转换,就要使用.def文件方式。
EXPORTS后面的数可以不给,系统会自动分配一个数。对于VB、PB、Delphi用户,通常使用按名称进行调用的方式,这个数关系不大,但是对于使用.lib链接的VC程序来说,不是按名称进行调用,而是按照这个数进行调用的,所以最好给出。
例子:我们用VC6.0制作一个dll,不使用.def文件,在头文件中这样写
#ifndef LIB_H
#define LIB_H
extern "C" int _declspec(dllexport)add(int x,int y);
#endif
如果是.def文件,可以这样
LIBRARY "xxx_dll"
EXPORTS
add PRIVAT
模块定义 (.def) 文件为链接器提供有关被链接程序的导出、属性及其他方面的信息。生成 DLL 时,.def 文件最有用。由于存在可代替模块定义语句使用的链接器选项
,通常不需要 .def 文件。也可以将 __declspec(dllexport)
用作指定导出函数的手段。在链接器阶段可以使用 /DEF(指定模块定义文件)
链接器选项调用 .def 文件。
如果生成的 .exe 文件没有导出,使用 .def 文件将使输出文件较大并降低加载速度。
通俗解释:
在
VC++中,生成DLL可以不使用.def文件。只需要在VC++的函数定义前要加__declspec(dllexport)修饰就可以了。但是使用
__declspec(dllexport)和使用.def文件是有区别的。如果DLL是提供给VC++用户使用的,你只需要把编译DLL时产生
的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果你的DLL是供其他程序如VB、delphi,以及.NET
用户使用的,那么会产生一个小麻烦。因为VC++对于__declspec(dllexport)声明的函数会进行名称转换,如下面的函数:
__declspec(dllexport) int __stdcall IsWinNT()
会转换为IsWinNT@0,这样你在VB中必须这样声明:
Declare Function IsWinNT Lib "my.dll" Alias "IsWinNT@0" () As Long
@的后面的数由于参数类型不同而可能不同。这显然不太方便。所以如果要想避免这种转换,就要使用.def文件方式。
EXPORTS后面的数可以不给,系统会自动分配一个数。对于VB、PB、Delphi用户,通常使用按名称进行调用的方式,这个数关系不大,但是对于使用.lib链接的VC程序来说,不是按名称进行调用,而是按照这个数进行调用的,所以最好给出。
例子:我们用VC6.0制作一个dll,不使用.def文件,在头文件中这样写
#ifndef LIB_H
#define LIB_H
extern "C" int _declspec(dllexport)add(int x,int y);
#endif
如果是.def文件,可以这样
LIBRARY "xxx_dll"
EXPORTS
add PRIVAT
相关文章推荐
- 模块定义(.def)文件说明
- 详解模块定义(.def)文件
- 详解模块定义(.def)文件
- 模块定义 (.def) 文件
- 模块定义 (.def) 文件
- 使用 DEF (模块定义) 文件从 DLL 导出函数和类
- 详解模块定义(.def)文件
- 模块定义 (.Def) 文件
- SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(1)--说明篇(原创)(转载本文请注明出处)
- 将DLL中的导出函数表导出到一定义(.DEF)文件
- DEF文件说明
- QT中PRO文件的简单说明(网络模块应用注意事项)
- nodejs使用multiparty模块实现文件上传(另附express.bodyParser()的说明)
- 页定义文件:pagedef
- VS 对象定义被隐藏(无法打开模块文件“C:...\.NETFramework,Verssion=v4.5.AssemblyAttributes.vb”系统找不到指定文件。)
- 叙述下列术语的定义并说明它们之间的关系:卷、块、文件、记录。
- python3 文件解析模块(html,email等说明)
- 【736c677c4】log4j多模块配置文件模板 (含注释及优先级说明)
- ServiceStack 项目实例 003 建议的文件结构定义及服务类说明
- Z-BLOG V1.8 模块文件及标签变量说明