为了下一篇文章做点准备。

首先,关于.DEF文件,MSDN有这么几行字说明:

Module-definition (.DEF) files provide the linker with information about exports, attributes, and other information about the program to be linked. Use the /DEF option to specify the .DEF file name. Because LINK provides options and other features that can be used instead of module-definition statements, .DEF files are generally not necessary.

注:模块定义文件(.DEF)文件将要链接的程序的输出函数,属性和其他信息提供给链接器(大侠注:链接是编译过程的最终步骤)。使用/def 参数以置顶.DEF文件名。因为链接提供的参数(大侠注:这些参数可能来自IDE或者命令行手动指定)可能替换模块定义语句,.DEF文件通常不是必要的。

下面是关于.DEF文件的MSDN帮助:

A module-definition (.DEF) file is a text file that contains statements for defining an .EXE file or DLL.

Because LINK provides equivalent command-line options for most module-definition statements, a typical program for Win32 does not usually require a .DEF file. The descriptions of the module-definition statements give the command-line equivalent for each statement.

See the following sections for more information:

Rules for Module-Definition Statements

NAME

LIBRARY

DESCRIPTION

STACKSIZE

SECTIONS

EXPORTS

VERSION

意思大体与上面的一致,我就不具体翻译了。主要是.DEF可包括那几个关键字,下面做注意说明:

1.模块定义语句的规则

关键字不是大小写敏感的,而用户标识符则是大小写敏感的。如ExPoRtS与EXPORTS都是可以的,但是你定义一个函数fnTest,则不能写为fntest。

常文件名包括空格或分号,必须用引号包括起来。

语句之间,关键字和参数之间用一个或多个空格、制表符或换行隔开。冒号或者等号指明参数被零个或多个空格、制表符或换行包围。

如果使用NAME或LIBRARY,则必须在其他语句之前。

大多数语句只出现一次并接受特定的参数。参数跟在关键字后面相同的行或后续的行中。此后如果有使用不同参数的语句,则后面的语句会覆盖前面的语句。

SECTIONS, EXPORTS, IMPORTS可以出现多次并能拥有多个参数,参数之间以一个或多个空格、制表符或换行隔开。关键字必须在第一个参数之前出现一次,可以在没割参数前面都出现。

许多语句于对应的LINK选项相同(大侠注:原词equivalent),请参阅对应的LINK选项以获取更多的详细说明。

以分号开始的行为注释行。注释行不能和其他语句同在一行上,但可以在多行语句只中。(SECTIONS和EXPORTS是多行语句。)

数字用十进制或C语言表示法。(大侠注:0x10=16)

如果一个字符参数于保留字相同,则用引号包括起来。

2.NAME语法

NAME [application][BASE=address]

该语句指定输出文件名。指定输出文件名与/OUT参数是等效的,而指定代码基址则于/BASE参数是等效的。如果都已指定,那么/OUT参数覆盖NAME语句。

3.LIBRARY语法

LIBRARY [library][BASE=address]

此语句告诉链接器创建一个DLL,与此同时,链接器创建一个导入库,除非对应的.exp文件在生成中已经使用。

library语句指定DLL的内部名称(使用/out参数指定输出文件名)。

BASE参数设置操作系统装载DLL的基址,它会覆盖默认基址=0x10000000,参阅/BASE参数了解关于基址的详情。

同样,等效的参数是/DLL和/BASE。

4.DESCRIPTION语法

DESCRIPTION "text"

此语句将一个字符串写入.rdata块,文本用一个或两个引号('或")包括。字符串中使用引号,则用另外的引号包括字符串。

此语句于/COMMENT参数是不同的。

5.STACKSIZE语法

STACKSIZE reserve[,commit]

此语句以字节为单位设置堆栈的大小。与/STACK参数是等效的,查阅此参数的文档以了解reserve和commit参数的详情。

(大侠:微软这么说,意思就是不建议我们去设置它。)

6.SECTION语法

section [CLASS 'classname'] attributes

此语句设置镜像文件中一个或多个块的属性。可以用来重写各个块的默认属性。(大侠:汇编语言中,准确的术语是“段”,如.data默认是数据段,.code默认是代码段。)

SECTION标志块定义列表的开始,每一个定义必须分在不同的行上。SECTION关键字可以在第一个定义相同的行或之前的行上。一个.DEF文件可以有多个SECTION语句,SEGMENTS关键字可作为SECTION的替代关键字。

块名称是大小写敏感的。CLASS关键字用于提供兼容性,它会被忽略。属性参数是以下几个之一:EXECUTE, READ, SHARED 和 WRITE.

等效的参数是/SECTION。

7.EXPORTS语法

entryname[=internalname] [@ordinal[NONAME]] [DATA] [PRIVATE]

此语句使一个或多个定义能输出给其他程序。

大侠:EXPORTS关键字与SECTION关键字规则相同,不再翻译赘述。

可选的PRIVATE关键字可以防止LINK产生的导入库替换entryname。它对LINK产生的镜像中的导出没有影响。

对于定义的输出,有三种按推荐程度排列的方法:

1).在源代码使用__declspec(dllexport)。

2).在.DEF文件使用EXPORTS语句。

3).在LINK命令中使用/EXPORT指定。

这三种方法可以在一个程序中同时使用。当LINK创建一个程序包括输出,那么同时也会创建一个导入库,除非对应的.exp文件已在使用。

8.VERSION语法

VERSION major[.minor]

此语句告诉链接器把一个数字写入EXE或DLL的头部。major 和 minor参数是0到65535之间的数值。默认是0.0。

等效的方法是编译时的/VERSION选项。

大侠注:个人水平限制,请勿用作论文材料或依据。详情请查阅MSDN。

c语言中.def文件,VC++中的.DEF文件详解相关推荐

  1. c语言中%s的作用,C语言中%c与%s的区别与划分详解

    %c格式对应的是单个字符,%s格式对应的是字符串. 例: char a; char b[20]; scanf("%c",&a); //只能输入一个字符. scanf(&qu ...

  2. C语言中的sprint函数,求sprintf函数的详解

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:求sprintf函数的详解,要附带例,粘贴来的也可以,只 问题详情:还有就是我还想要一些常用的宽度修饰之类的输入或者输出格式:回答: ...

  3. c语言中limit 用法,mysql limit用法及优化详解

    摘要 腾兴网为您分享:mysql limit用法及优化详解,一点万象,喜马拉雅,唯品会,图乐等软件知识,以及盟重土城花屏补丁,宝马车主俱乐部,本地文件搜索,锁定刷新率,发券,微信多开真正版,云门禁,真 ...

  4. f_lseek_C语言中lseek()函数和fseek()函数的使用详解

    C语言lseek()函数:移动文件的读写位置 头文件: #include #include 定义函数: off_t lseek(int fildes, off_t offset, int whence ...

  5. linux桌面怎么解压tar文件,Linux中tar解压缩命令详解-tar文件怎么打开

    语法:tar [主选项+辅选项] 文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项:c 创建新的档案文件.如果用户想备份一个目录或是一些 ...

  6. main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...

    PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...

  7. VC中操作INI文件的API

    VC中操作INI文件的API (1)操作系统配置文件Win.ini的函数: 函数名 功能 GetProfileSection 读取win.ini中指定节lpAppName中所有键名及其值.lpRetu ...

  8. c语言中math的库函数,C语言中math.h库中的常用函数

    C语言中math.h库中的常用函数 int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fa ...

  9. vc中操作INI文件函数

    一 VC中操作INI文件函数 函数名 功能 备注 GetPrivateProfileInt                       读取INI文件指定块中的键名对应的整数值.   GetPriva ...

  10. python中with open写csv文件_Python中的CSV文件使用with语句的方式详解

    是否可以直接使用with语句与CSV文件?能够做这样的事情似乎很自然: import csv with csv.reader(open("myfile.csv")) as read ...

最新文章

  1. 云原生平台的建设怎么搞?监控系统又该如何演进?这里有答案!
  2. HALCON示例程序resistor.hdev通过不同焦距图像提取深度信息
  3. 前端学习(3343):ant design中导航使用
  4. spring boot入门学习---热部署
  5. 每日算法系列【LeetCode 495】提莫攻击
  6. 不拦截Request!基于WKWebView的API实现Hybrid容器
  7. FRR BGP协议分析13 -- ZEBRA路由的处理2
  8. paip.java桌面开发应用与WEB RIA应用
  9. js返回上一页并刷新、返回上一页、自动刷新页面
  10. 按钮按一下画个直线_直线导轨数控车床概念和作用
  11. AT89S52单片机之定时器/计数器
  12. 服务器接千兆无线网卡,用户吓跑!千兆宽带就是坑爹货:真相崩溃
  13. 工具:dlf 强制删除文件或文件夹
  14. Docker swarm搭建及常用命令、yml文件
  15. 移动硬盘坏了,自己搞定解决方案
  16. android 抠图功能吗,抠图宝(抠图宝.和图)V10.01 安卓版
  17. 上百本中文书籍中对《人月神话》的引用(1)
  18. python pos函数_如何用Python画一只肥肥的柯基狗狗—turtle库绘制椭圆与弧线实践
  19. PUSHmall 推贴订货商城系统 — — B2B/B2C批发零售采销模式,商贸流通企业最佳电商解决方案
  20. Hilbert变换和接收机(I)

热门文章

  1. 减轻压力保护脊椎,上学路上更轻松,Deuter多特护脊减负双肩背包体验
  2. 抓不到作弊学生就集体扣分!澳洲国立大学计算机系300多人被降分停课
  3. SaaS模式和传统软件模式有什么区别?
  4. dataV实现扇形图轮播
  5. 666RPG(计数dp)
  6. Boren-python接小球游戏
  7. 2021年吹过的牛都实现了吗?2022年你又期待遇见怎样的自己?
  8. python打开xlsm_关于python:如何使用openpyxl使用Macro保存XLSM文件
  9. HC-SR501红外人体传感模块封锁时间调整
  10. 基于SPSS的医疗医保费用数据分析预测(C#)