搜索墙首页  编程技术  java  asp  ajax  php  c/c#/c++  数据库  oracle  mysql  db2  操作系统  windows  linux  股吧
首页 > 操作系统 > windows
 1         
1楼  jyfbll 2008-01-09

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

http://zhidao.baidu.com/question/23590158.html?si=3

 1         
您的发言将按有关规定都会存档,您须为所发表后果负责,请您遵纪守法并注意语言文明。
标题:def模块定义文件
热门关注
标题回复点击
类型:伦理片 主演:杨思敏661540
一键还原精灵密码破解0925
Excel中了宏病毒, 怎样清除, 有专杀工具吗?3887
急,在线求助。关于安装程序弹出查找ProPlusWW.msi文件的问题。3688
D:\WINCE500\Updates\Windows CE 5.0_Product_Update_0496
一键还原精灵密码破解0496
Microsoft Radio Interface Layer0464
Adobe Acrobat 8.1.2 Professional 注册机使用方法0447
无差别看QQ空间日志【不管好友非好友,权限非权限】1385
rundll加载模块错误的终极解决方法0291
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源