![](https://csdnimg.cn/release/download_crawler_static/3562442/bg1.jpg)
1
将现有的 C++类转换成 dll 动态链接库
张步阳 2011.7.10
1. dll 的类型
首先介绍一下 dll 的类型,读者必须根据自己要转换类的类型,选择合适的 dll 类型,否
则转化不会成功。常用的 dll 类型包括:Win32 DLL、MFC 常规 DLL、MFC 扩展 DLL 及资源 DLL。
1.1. Win32 DLL
指不使用 MFC 类库创建的 DLL。Win32 DLL 中的导出函数通常使用标准的 C 接口,这些
函数可以被 MFC 或非 MFC 应用程序调用。
1.2. MFC 常规 DLL
MFC 常规 DLL 可以使用 MFC 来创建,可以导出 C 风格的函数,但不能导出 C++类、成
员函数或重载函数。它们可以被 MFC 或非 MFC 应用程序调用。但这种类型的 DLL 不能向应
用程序传递 MFC 对象指针,必须使用 MFC 扩展 DLL。MFC 常规 DLL 按照与 MFC 的链接方式
又分动态链接和静态链接两种。
1.3. MFC 扩展 DLL
表面上更像应用程序而不像一组函数的集合,因为它可以创建 MFC 派生类。只能以动
态方式与 MFC 链接,而且只能是使用 MFC 的动态链接版本的应用程序才可以使用这种 DLL。
在 MFC 扩展 DLL 中,可以由现有的 MFC 类导出自己的类,然后给应用程序一个扩展的 MFC
版本。支持 C++接口,也就是说,该 DLL 可以导出整个类,客户可以构造这些类的对象或从
这些类进行派生。还可以用于在应用程序和 DLL 之间传递 MFC 导出对象。对象的成员函数
位于创建对象的模块中,应用程序和它加载的扩展 DLL 之间可以自幼地传递 MFC 或 MFC 导
出对象的指针。
1.4. 资源 DLL
只包含需要共享的资源,如菜单、字符串、图标、位图、对话框等。资源 DLL 一般都是
不使用 MFC 的 Win32 DLL。如果多个程序要共享同一组资源,一个好的解决办法就是将这些
资源放在一个资源 DLL 中。
总结:从以上看出,仅有 MFC 扩展 DLL 可以导出 C++类及类中的成员函数,也可以导出
MFC 类及成员函数。而对于 MFC 常规 DLL 可以使用 MFC 但是不能导出类及类成员函数,如
果想导出类中的成员函数,只能将成员函数转化成全局函数。