Windows dll编写与def文件
2009-02-08 16:18
801 查看
问题1:
查看一个编写的dll的输出,函数名老是 _xxxx@n之类,已经使用了extern "C"并工程中添加了def文件。在“问专家”中搜索到这么一段:
在VC++中,如果生成DLL可以不使用.def文件。你只需要在VC++的函数定义前要加
__declspec(dllexport)修饰就可以了。但是使用__declspec(dllexport)和使用.def文件是有区别的。如果你的
DLL是提供给VC++用户使用的,你只需要把编译DLL时产生的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果你的DLL是供VB、
PB、Delphi用户使用的,那么会产生一个小麻烦。因为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程序来说,不是按名称进行调用,而是按照这个数进行调用的,所以最好给出。
看来是def文件没起到作用。最终发现需要将def文件配置到VC工程中的“链接器”的“模块定义文件”中。
问题2:
在def中增加几个输出函数定义后(这些函数本来已经输出,但没有加到def文件中),发现某些以前编译的程序执行报错找不着函数,但其他一些程序没有报错。看来报错的程序连接时没有使用lib文件,而没报错的使用了;没使用lib文件的通过hint定位函数,所以总能找到但可能找错了——难怪听说这个库以前发生过函数调错的现象。
增加了输出函数却忘了在def中增加定义,新手写的代码又无人检查,最严重的是后期的版本问题。
查看一个编写的dll的输出,函数名老是 _xxxx@n之类,已经使用了extern "C"并工程中添加了def文件。在“问专家”中搜索到这么一段:
在VC++中,如果生成DLL可以不使用.def文件。你只需要在VC++的函数定义前要加
__declspec(dllexport)修饰就可以了。但是使用__declspec(dllexport)和使用.def文件是有区别的。如果你的
DLL是提供给VC++用户使用的,你只需要把编译DLL时产生的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果你的DLL是供VB、
PB、Delphi用户使用的,那么会产生一个小麻烦。因为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程序来说,不是按名称进行调用,而是按照这个数进行调用的,所以最好给出。
看来是def文件没起到作用。最终发现需要将def文件配置到VC工程中的“链接器”的“模块定义文件”中。
问题2:
在def中增加几个输出函数定义后(这些函数本来已经输出,但没有加到def文件中),发现某些以前编译的程序执行报错找不着函数,但其他一些程序没有报错。看来报错的程序连接时没有使用lib文件,而没报错的使用了;没使用lib文件的通过hint定位函数,所以总能找到但可能找错了——难怪听说这个库以前发生过函数调错的现象。
增加了输出函数却忘了在def中增加定义,新手写的代码又无人检查,最严重的是后期的版本问题。
相关文章推荐
- windows下的动态链接问题(.dll文件的编写与调用)
- vs2005中Def文件的使用方法(DLL编写无法找到函数名称)
- windows 10(64位)下实现vs20120C++调用matlab r2014a编写的m文件生成的.dll,.lib,.h文件
- Eclipse for C/C++ (三)编写DLL文件之def文件的使用
- Windows 下根据dll和def文件导出lib文件
- 编写windows程序中的“.def”文件<模块定义文件>
- Windows 下根据dll和def文件导出lib文件
- VC6动态库导入导出和DEF文件编写(dll,export,def)
- Windows/MFC_dll生成文件___浅谈def文件(用于生成dll)
- DLL DEF文件编写方法 VC++ 调用、调试DLL的方法 显式(静态)调用、隐式(动态)调用
- dll函数与def文件
- delphi 编写dll文件
- 关于DLL的导出.def文件
- 金山毒霸安全预警:不安全的dll文件导致Windows被攻击 推荐
- 22.Silverlight使用WebService调用C++,Delphi编写的DLL文件
- CS0016: 未能写入输出文件“c:\WINDOWS\Microsoft.NET\***.dll”错误处理
- 未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\.....dll”--“拒绝访问。
- VC2010 利用 def 文件生成 dll 文件的方法 转载
- 在windows使用notepad++编写Linux文件的时候,处理换行问题(删掉CF/LF ^M)
- windows 32位 64位 DLL 文件读取问题