c++中dll函数的导出和导入

c++中dll函数的导出和导入

ID:16727513

大小:36.00 KB

页数:8页

时间:2018-08-24

c++中dll函数的导出和导入_第1页
c++中dll函数的导出和导入_第2页
c++中dll函数的导出和导入_第3页
c++中dll函数的导出和导入_第4页
c++中dll函数的导出和导入_第5页
资源描述:

《c++中dll函数的导出和导入》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1.使用DEF文件从DLL导出模块定义(.def)文件是包含一个或多个描述DLL各种属性的Module语句的文本文件。如果不使用__declspec(dllexport)关键字导出DLL的函数,则DLL需要.def文件。.def文件必须至少包含下列模块定义语句:文件中的第一个语句必须是LIBRARY语句。此语句将.def文件标识为属于DLL。LIBRARY语句的后面是DLL的名称。链接器将此名称放到DLL的导入库中。EXPORTS语句列出名称,可能的话还会列出DLL导出函数的序号值。通过在函数名的后面加上@符和一个数字,给函数分配序号值。当指定序号值时,序号值的

2、范围必须是从1到N,其中N是DLL导出函数的个数。如果希望按序号导出函数,请参见按序号而不是按名称从DLL导出函数以及本主题。例如,包含实现二进制搜索树的代码的DLL看上去可能像下面这样:LIBRARYBTREEEXPORTSInsert@1Delete@2Member@3Min@4如果使用MFCDLL向导创建MFCDLL,则向导将为您创建主干.def文件并将其自动添加到项目中。添加要导出到此文件的函数名。对于非MFCDLL,必须亲自创建.def文件并将其添加到项目中。如果导出C++文件中的函数,必须将修饰名放到.def文件中,或者通过使用外部“C”定义具有标准

3、C链接的导出函数。如果需要将修饰名放到.defforthequalityofreviewsandreview.Article26threview(a)theCCRAcompliance,whethercopiesofchecks;(B)whetherdoubleinvestigation;(C)submissionofprogramcompliance,investigationorexaminationofwhetherviewsareclear;(D)theborrower,guarantorloans文件中,则可以通过使用DUMPBIN工具或/MAP链接器

4、选项来获取修饰名。请注意,编译器产生的修饰名是编译器特定的。如果将VisualC++编译器产生的修饰名放到.def文件中,则链接到DLL的应用程序必须也是用相同版本的VisualC++生成的,这样调用应用程序中的修饰名才能与DLL的.def文件中的导出名相匹配。如果生成扩展DLL并使用.def文件导出,则将下列代码放在包含导出类的头文件的开头和结尾:#undefAFX_DATA#defineAFX_DATAAFX_EXT_DATA//#undefAFX_DATA#defineAFX_DATA这些代码行确保内部使用的MF

5、C变量或添加到类的变量是从扩展DLL导出(或导入)的。例如,当使用DECLARE_DYNAMIC派生类时,该宏扩展以将CRuntimeClass成员变量添加到类。省去这四行代码可能会导致不能正确编译或链接DLL,或在客户端应用程序链接到DLL时导致错误。当生成DLL时,链接器使用.def文件创建导出(.exp)文件和导入库(.lib)文件。然后,链接器使用导出文件生成DLL文件。隐式链接到DLL的可执行文件在生成时链接到导入库。请注意,MFC本身使用.def文件从MFCx0.dll导出函数和类。1.使用_declspec(dllexport)从DLL导出Micr

6、osoft在VisualC++的16位编译器版本中引入了_export,使编译器得以自动生成导出名并将它们放到一个.lib文件中。然后,此.lib文件就可以像静态.lib那样用于与DLL链接。forthequalityofreviewsandreview.Article26threview(a)theCCRAcompliance,whethercopiesofchecks;(B)whetherdoubleinvestigation;(C)submissionofprogramcompliance,investigationorexaminationofwheth

7、erviewsareclear;(D)theborrower,guarantorloans在更新的编译器版本中,可以使用_declspec(dllexport)关键字从DLL导出数据、函数、类或类成员函数。_declspec(dllexport)会将导出指令添加到对象文件中,因此您不需要使用.def文件。当试图导出C++修饰函数名时,这种便利最明显。由于对名称修饰没有标准规范,因此导出函数的名称在不同的编译器版本中可能有所变化。如果使用_declspec(dllexport),仅当解决任何命名约定更改时才必须重新编译DLL和依赖.exe文件。许多导出指令(如序号

8、、NONAME和PRIV

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。