当前位置:C++技术网 > 资讯 > 动态链接库dll创建和使用相关详细说明

动态链接库dll创建和使用相关详细说明

更新时间:2015-06-25 14:17:36浏览次数:1+次

    通常使用静态的加载方式,将头文件中函数名列出来,提供给调用者使用。同时使用模块定义文件并将函数的序号和在函数名都列出来,供动态调用。

    导出全局函数:
    1.导出时每个函数都要标注_declspec(dllexport)。
    2.导入的每个函数都要标注_declspec(dllimport) 或者 extern。

    导出类:
    1.导出时在class 和 类名之间 加上 _declspec(dllexport)即可将所有的成员函数导出。
    2.导出时只在想导出的函数名前面加上_declspec(dllexport)则只导出这个成员函数。
    3.导入时声明类和导出时一样,只是换成_declspec(dllimport)。

    库函数的使用:
    1.直接导出的函数名在C编译器中会进行名字改编,因此,这种方式只支持静态动态库的加载。方法:VC6.0在LINK标签页下填写lib文件的路径。VS2010在属性-》链接器-》输入-》附加依赖项中 填入lib文件的路径。在模块定义文件中填写def文件的路径。其他VS系列,参考VS2010。
    2.名字改编只针对函数名,类名不参与改编。因此,def文件中不需要写类名,只需要写函数名即可。def是用于重定义导出函数名的,可想而知。
    3.建立DLL项目时选择win32 DLL项目,选上MFC,这样就支持MFC的类了。如果选择为空,可以手动在项目中加入其他动态链接库的stdafx.h、stdafx.cpp、targetver.h、Resource.h文件。和直接建立MFC 共享DLL 差不多,就一个项目启动CPP文件有点差别而已。
    4.静态使用动态链接库名字会改编,因此不支持动态加载。如果要动态加载则需要使用模块定义文件确定函数名的导出。
    5.在编写动态链接库时,将头文件用宏来区别到如何导出,将DLL文件提供给别人使用时,同时提供头文件、lib文件和dll文件。使用时先包含头文件,在项目中导入lib文件,然后将dll文件放入项目文件夹(存放cpp文件的文件夹中)。
    6.运行程序时,只需要将dll文件放在exe程序同一个文件夹下即可。
    7.基于了MFC,则可以支持MFC的类,但是此种方式是使用共享的MFC或者静态的MFC,不能够导出MFC本身的类,只能导出自己写的类,如果要导出MFC的类,必须使用扩展的MFC动态链接库。

    以上仅供参考,限于本人水平,如果错误或者不准确之处,请指正!