background image

MFC 或 MFC 编写的应用程序所调用。Regular DLL:和下述的 Extension Dlls 一样,是
用 MFC 类库编写的,它的一个明显的特点是在源文件里有一个继承 CWinApp 的类(注
意:此类 DLL 虽然从 CWinApp

 

派生,但没有 消息循环),被导出的函数是 C 函数、C++

类或者 C++成员函数(注意不要把术语 C++类与 MFC 的微软基础 C++类相混淆),
调用常规 DLL

 

的应用程序 不必是 MFC 应用程序,只要是能调用类 C 函数的应用程序就

可以,它们可以是在 Visual C++、Dephi、Visual Basic、Borland C 等编译环境下利用
DLL

  常规 DLL 又可细分成静态链接到 MFC 和动态链接到 MFC 上的,这两种常规 DLL 的
区别将在下面介绍。与常规 DLL 相比,使用扩展 DLL 用于导出增强 MFC 基础类的函数或
子 类 , 用 这 种 类 型 的 动 态 链 接 库 , 可 以 用 来 输 出 一 个 从 MFC 所 继 承 下 来 的 类 。

  扩展 DLL 是使用 MFC 的动态链接版本所创建的,并且它只被用 MFC 类库所编写的
应用程序所调用。例如你已经创建了一个从 MFC 的 CtoolBar

 

类 的派生类用于创建一个

新的工具栏,为了导出这个类,你必须把它放到一个 MFC 扩展的 DLL 中。扩展 DLL 和常
规 DLL 不一样,它没有一个从 CWinApp 继承而来的类的对象,所以,开发人员必须在
DLL 中 的 DllMain 函 数 添 加 初 始 化 代 码 和 结 束 代 码 。

  在 Visual C++6.0 开发环境下,打开 File\New\Project 选项,可以选择 Win32 
Dynamic-Link Library 或 MFC AppWizard[dll] 来 以 不 同 的 方 式 来 创 建 Non-MFC 
Dll 、 Regular   Dll 、 Extension   Dll 等 不 同 种 类 的 动 态 链 接 库 。

    1

 

. Win32   Dynamic-Link   Library 方 式 创 建 Non-MFC   DLL 动 态 链 接 库

  每一个 DLL 必须有一个入口点,这就象我们用 C 编写的应用程序一样,必须有一个
WINMAIN 函数一样。在 Non-MFC DLL 中 DllMain 是一个缺省的入口函数,你不需要编
写自己的 DLL 入口函数,用这个缺省的入口函数就能使动态链接库被调用时得到正确的

 

初始化。如果 应用程序的 DLL 需要分配额外的内存或资源时,或者说需要对每个进程或
线程初始化和清除操作时,需要在相应的 DLL 工程的.CPP 文件中对 DllMain ()函数按照

BOOL  APIENTRY   DllMain(HANDLE  hModule,DWORD  ul_reason_for_call,LPVOID 
lpReserved)
{
switch(

 

ul_reason_for_call

 

)

{
case

 

DLL_PROCESS_ATTACH:

.......
case

 

DLL_THREAD_ATTACH:

.......
case

 

DLL_THREAD_DETACH:

.......