在我们实际用软件时,经常可看到许多动态连接库。动态连接库有其自身的优点如节省内存、支持多语种等功能,而且,当DLL中的函数改变后,只要不是参数的改变调用起的函数并不需要重新编译。这在编程时十分有用。
而DLL在VC中有三种形式:
1、Non-MFC Dlls
2、Regular Dlls
3、Extension Dlls
Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。
Regular DLL:和下述的Extension Dlls一样,是用MFC类库编写的。明显的特点是在源文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上的。但静态连接到MFC的动态连接库只被VC的专业般和企业版所支持。
Extension DLL:用来实现从MFC所继承下来的类的重新利用,也就是说,用这种类型的动态连接库,可以用来输出一个从MFC所继承下来的类。Extension DLL使用MFC的动态连接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。
通常情况下,我们只需要使用第一种形式的DLL即可,下面将具体介绍如何在VC.net环境下快速实现DLL编程。
图1 创建DLL项目
一、创建DLL项目
如图1,在左边窗口选择Visual C++项目下的Win32,在窗口右面选择Win32控制台项目,在窗口下方填入项目名称,然后点击确定按钮。出现图2应用程序向导窗口。
在图2中,左边选择“应用程序设置”,然后在右面的窗口中选择应用程序类型为DLL,附加选项中将导出符号项钩上。具体见(图2)。
钩上导出符号选项后,在随后生成的DLL项目中就会有简单例子示例,从而很简单的就能添加自己所需要的函数和类。
最后点击确定按钮。一个DLL项目就完成了。
图2 应用程序设置
二、编写所需函数或类
在产生的DLL项目中选择testDLL.h文件,会有下面的一些代码示例:
// 此类是从 testDLL.dll 导出的
class TESTDLL_API CtestDLL {
public:
CtestDLL(void);
// TODO: 在此添加您的方法。
};
extern TESTDLL_API int ntestDLL;
TESTDLL_API int fntestDLL(void);
其中class TESTDLL_API CtestDLL是如何到处类的实例。
TESTDLL_API int fntestDLL(void)是如何导出函数的实例。
extern TESTDLL_API int ntestDLL是如何到处变量的实例。(由于是在testDLL.cpp中定义的,所以这边使用的extern作为远程声明。)
即所有需要导出的类、函数、变量,只需要在他们的定义前增加TESTDLL_API即可。而TESTDLL_API是在testDLL.h中由VC.net自己自动生成的。具体生成文件见testDLL.h。
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
如上所述,就可以将所要转化成DLL的工程很容易的轻松实现。
图3 testDLL.h文件
图3 testDLL.h文件
图3 testDLL.h文件
图3 testDLL.h文件