请问DLL 的 DEF文件有什么作用?
来源:百度文库 编辑:神马文学网 时间:2024/04/29 11:08:34
yukuang(编程是我的业余爱好)2001-02-13 09:32:00 在 VC/MFC / 基础类 提问
问题点数:20、回复次数:11Top
lhxx(随风)回复于 2001-02-13 09:57:00 得分 0
DEF文件就是将DLL的函数入口导出,使程序可以正确访问
如果你用的是扩展的DLL就不用DLL了,否则就一定要,不然就会在调用时出现非法操作!Top
vc_boy()回复于 2001-02-13 10:00:00 得分 0
如果不在函数的定义前加上dllexport等,就要在此文件中加入要导出的函数名称Top
hide(躲在风里面)回复于 2001-02-13 10:20:00 得分 0
如果你的dll 导出函数用的是 extern "C" functionname
的话,就需要生成一个def文件来说明你的导出函数和变量。
如果使用 _declspec(dllexport) 来生命导出函数和变量的话,就不需要了。因为_declspec(dllexport)是microsoft c/c++的一个新的关键字,编程程序在编程的时候,会在obj文件中加入相应的信息,连接程序在处理的时候,会分析到的Top
zzh()回复于 2001-02-13 11:06:00 得分 0
如果你使用winapi方式来定义的话,就必须手工在DEF文件中加入定义,不然,就找不到入口点,别的语言没有办法访问,如果使用_declspec(dllexport)或_declspec(dllinport)来定义的话,就不需要了。Top
yukuang(编程是我的业余爱好)回复于 2001-02-13 13:34:00 得分 0
to lhxx(随风) :什么是扩展的DLL?Top
YuHao()回复于 2001-02-13 22:52:00 得分 0
我的经验是即使在程序中用了__declspec(dllexport),最好也用DEF文件,否则用exescope看一下输出的函数,名字完全变了!用DEF显式的定义函数名称就没有问题.Top
horris(僧推月下门)回复于 2001-02-13 23:01:00 得分 0
说的都不对!不管是用MFC还是SDK,不管用没有dllexport,DEF都是可选的。DEF的作用一是指定导出函数的序号,以使调用都可以用序号调用DLL的导出函数,否则,只能按名称调用,这样慢,而且只能使用显式引用(即在程序中用LoadLibrary,GetProcAddress等),而不能用隐式引用(象VC中使用LIB文件引用)。DEF的另一重要作用是可以指定DLL中的某些全局变量为调用进程共享,一般这些变量是每个调用进程都要生成一个的。还有别的作用我记不清了,请大家查MSDN吧。Top
horris(僧推月下门)回复于 2001-02-13 23:02:00 得分 0
补充一点,如果作Win16的应用,必须有DEF文件,这可是陈年老谷子的事了。Top
yukuang(编程是我的业余爱好)回复于 2001-02-14 09:04:00 得分 0
到底谁的对?Top
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
Sandyyang(雨夜街头)回复于 2001-02-18 11:17:00 得分 10
得看具体的连接器。如BCB,Delphi就不用。
其他大多数连接器要以他作为参考,输出导出函数名,以及一些附加信息。
问题点数:20、回复次数:11Top
lhxx(随风)回复于 2001-02-13 09:57:00 得分 0
DEF文件就是将DLL的函数入口导出,使程序可以正确访问
如果你用的是扩展的DLL就不用DLL了,否则就一定要,不然就会在调用时出现非法操作!Top
vc_boy()回复于 2001-02-13 10:00:00 得分 0
如果不在函数的定义前加上dllexport等,就要在此文件中加入要导出的函数名称Top
hide(躲在风里面)回复于 2001-02-13 10:20:00 得分 0
如果你的dll 导出函数用的是 extern "C" functionname
的话,就需要生成一个def文件来说明你的导出函数和变量。
如果使用 _declspec(dllexport) 来生命导出函数和变量的话,就不需要了。因为_declspec(dllexport)是microsoft c/c++的一个新的关键字,编程程序在编程的时候,会在obj文件中加入相应的信息,连接程序在处理的时候,会分析到的Top
zzh()回复于 2001-02-13 11:06:00 得分 0
如果你使用winapi方式来定义的话,就必须手工在DEF文件中加入定义,不然,就找不到入口点,别的语言没有办法访问,如果使用_declspec(dllexport)或_declspec(dllinport)来定义的话,就不需要了。Top
yukuang(编程是我的业余爱好)回复于 2001-02-13 13:34:00 得分 0
to lhxx(随风) :什么是扩展的DLL?Top
YuHao()回复于 2001-02-13 22:52:00 得分 0
我的经验是即使在程序中用了__declspec(dllexport),最好也用DEF文件,否则用exescope看一下输出的函数,名字完全变了!用DEF显式的定义函数名称就没有问题.Top
horris(僧推月下门)回复于 2001-02-13 23:01:00 得分 0
说的都不对!不管是用MFC还是SDK,不管用没有dllexport,DEF都是可选的。DEF的作用一是指定导出函数的序号,以使调用都可以用序号调用DLL的导出函数,否则,只能按名称调用,这样慢,而且只能使用显式引用(即在程序中用LoadLibrary,GetProcAddress等),而不能用隐式引用(象VC中使用LIB文件引用)。DEF的另一重要作用是可以指定DLL中的某些全局变量为调用进程共享,一般这些变量是每个调用进程都要生成一个的。还有别的作用我记不清了,请大家查MSDN吧。Top
horris(僧推月下门)回复于 2001-02-13 23:02:00 得分 0
补充一点,如果作Win16的应用,必须有DEF文件,这可是陈年老谷子的事了。Top
yukuang(编程是我的业余爱好)回复于 2001-02-14 09:04:00 得分 0
到底谁的对?Top
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
Sandyyang(雨夜街头)回复于 2001-02-18 11:17:00 得分 10
得看具体的连接器。如BCB,Delphi就不用。
其他大多数连接器要以他作为参考,输出导出函数名,以及一些附加信息。
请问DLL 的 DEF文件有什么作用?
请问DLL 的 DEF文件有什么作用?
VS中def文件对于生成dll和lib文件的作用 - caomiao2006的专栏 - CSDN博客
使用 DEF 文件从 DLL 导出
请问发票有什么作用?
请问柚子皮有什么作用
DEF与Dll构建
VC++中(.def) 文件
vbnet编译后有很多的dll文件如何才能编译成只有一个exe文件
请问刘老师,风水中的风有什么作用啊?(2008-07-29 刘东亮)
请问显卡的作用是什么
请问有什么可以快速有效的催奶方法?
删除Windows 2000多余的DLL文件
删除Windows 2000多余的DLL文件
Windows的系统中DLL文件详解
动物的尾巴有什么作用
蜜蜂的花粉都有什么作用
蜜蜂的花粉都有什么作用
【甜菜根的作用】甜菜根有什么作用
Kconfig文件的作用
心理咨询有什么作用?
Sitemap有什么作用?
风油精有什么作用
苏打粉有什么作用