CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请问DLL 的 DEF文件有什么作用?好象不用也行

楼主yukuang(编程是我的业余爱好)2001-02-13 09:32:00 在 VC/MFC / 基础类 提问

问题点数:20、回复次数:11Top

1 楼lhxx(随风)回复于 2001-02-13 09:57:00 得分 0

DEF文件就是将DLL的函数入口导出,使程序可以正确访问  
  如果你用的是扩展的DLL就不用DLL了,否则就一定要,不然就会在调用时出现非法操作!Top

2 楼vc_boy()回复于 2001-02-13 10:00:00 得分 0

如果不在函数的定义前加上dllexport等,就要在此文件中加入要导出的函数名称Top

3 楼hide(躲在风里面)回复于 2001-02-13 10:20:00 得分 0

如果你的dll   导出函数用的是   extern   "C"     functionname  
  的话,就需要生成一个def文件来说明你的导出函数和变量。  
  如果使用   _declspec(dllexport)   来生命导出函数和变量的话,就不需要了。因为_declspec(dllexport)是microsoft   c/c++的一个新的关键字,编程程序在编程的时候,会在obj文件中加入相应的信息,连接程序在处理的时候,会分析到的Top

4 楼zzh()回复于 2001-02-13 11:06:00 得分 0

如果你使用winapi方式来定义的话,就必须手工在DEF文件中加入定义,不然,就找不到入口点,别的语言没有办法访问,如果使用_declspec(dllexport)或_declspec(dllinport)来定义的话,就不需要了。Top

5 楼yukuang(编程是我的业余爱好)回复于 2001-02-13 13:34:00 得分 0

to   lhxx(随风) :什么是扩展的DLL?Top

6 楼YuHao()回复于 2001-02-13 22:52:00 得分 0

我的经验是即使在程序中用了__declspec(dllexport),最好也用DEF文件,否则用exescope看一下输出的函数,名字完全变了!用DEF显式的定义函数名称就没有问题.Top

7 楼horris(僧推月下门)回复于 2001-02-13 23:01:00 得分 0

说的都不对!不管是用MFC还是SDK,不管用没有dllexport,DEF都是可选的。DEF的作用一是指定导出函数的序号,以使调用都可以用序号调用DLL的导出函数,否则,只能按名称调用,这样慢,而且只能使用显式引用(即在程序中用LoadLibrary,GetProcAddress等),而不能用隐式引用(象VC中使用LIB文件引用)。DEF的另一重要作用是可以指定DLL中的某些全局变量为调用进程共享,一般这些变量是每个调用进程都要生成一个的。还有别的作用我记不清了,请大家查MSDN吧。Top

8 楼horris(僧推月下门)回复于 2001-02-13 23:02:00 得分 0

补充一点,如果作Win16的应用,必须有DEF文件,这可是陈年老谷子的事了。Top

9 楼yukuang(编程是我的业余爱好)回复于 2001-02-14 09:04:00 得分 0

到底谁的对?Top

10 楼horris(僧推月下门)回复于 2001-02-14 10:19:00 得分 10

to   YuHao:名字都不对了,是C语言的命名约定,全局函数都以_开始,或者是C++语言的命名约定。我的意见是导出函数以extern   "C"   WINAPI开始,后面是函数返回值、参数等原型,不要导出C++类的成员函数,即便是静态成员函数,这样可以保证各种语言的应用都能使用。  
  谁说的对试试就行了嘛。  
  一个函数定义有二个特性与导出有关:参数压出栈顺序,命名约定,标准的Windows   DLL用_stdcall参数约定,这由WINAPI定义;extern   "C"决定了函数前加_,而不是C++的模块名+@+函数名。但是标准DLL函数名不加_,所以要让比如VB访问你的DLL,最好用.DEF文件Top

11 楼Sandyyang(雨夜街头)回复于 2001-02-18 11:17:00 得分 10

得看具体的连接器。如BCB,Delphi就不用。  
  其他大多数连接器要以他作为参考,输出导出函数名,以及一些附加信息。Top

相关问题

  • 关于DLL文件的模板文件 .DEF
  • 有头文件、lib文件、dll文件,如何在BCB 中调用dll中的某个函数(VC论坛中的介绍好象不行),谢谢
  • DLL中两个函数同名,怎么定义 def 文件?
  • 怎么在dll的定义文件中(.def)导出一个类?
  • DLL使用def文件导出类的问题
  • 别人提供的DLL。LIB。EXP。DEF等DLL文件了,我如何调用
  • DLL文件?
  • .DEF文件
  • 关于dll文件
  • .DLL文件问题!

关键词

  • c++
  • 函数
  • 文件
  • dll
  • 命名
  • 语言
  • 导出
  • def
  • 调用
  • 定义

得分解答快速导航

  • 帖主:yukuang
  • horris
  • Sandyyang

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo