background image

case

 

DLL_PROCESS_DETACH:

.......
}
return

 

TRUE;

  参数中,hMoudle 是动态库被调用时所传递来的一个指向自己的句柄(实际上,它
是指向_DGROUP 段的一个选择符)  

; ul_reason_for_call 是一个说明动态库被调原因的

标志,当进程或线程装入或卸载动态链接库的时候,操作系统调用入口函数,并说明动

 

态链接 库被调用的原因,它所有的可能值为: DLL_PROCESS_ATTACH: 进程被调用 、
DLL_THREAD_ATTACH:   线 程 被 调 用 、 DLL_PROCESS_DETACH:   进 程 被 停 止 、
DLL_THREAD_DETACH: 线程被停止;lpReserved 为保留参数。到此为止,DLL 的入
口函数已经写了,剩下部分的实现也不难,你可以在 DLL 工程中加入你所想要输出的函

 

  我们已经知道 DLL 是包含若干个函数的库文件,应用程序使用 DLL 中的函数之前,

 

应该先导出这些函数,以便供给应用程序使用。要导出这些函数有两种方 法,一是在定
义函数时使用导出关键字_declspec(dllexport),另外一种方法是在创建 DLL 文件时使
用模块定义文件.Def

 

。需要读者注 意的是在使用第一种方法的时候,不能使用 DEF 文件。

下 面 通 过 两 个 例 子 来 说 明 如 何 使 用 这 两 种 方 法 创 建 DLL 文 件 。

  1)使用导出函数关键字_declspec(dllexport)创建 MyDll.dll,该动态链接库中有
两个函数,分别用来实现得到两个数的最大和最小数。在 MyDll.h 和 MyDLL.cpp 文件中

//MyDLL.h
extern   "C"   _declspec(dllexport)   int   Max(int   a,   int   b);
extern   "C"   _declspec(dllexport)   int   Min(int   a,   int   b);
//MyDll.cpp
#include
#include"MyDll.h"
int

 

Max(int

 

a,

 

int

 

b)

{
if(a>=b)return

 

a;

else
return

 

b;

}
int

 

Min(int

 

a,

 

int

 

b)

{
if(a>=b)return

 

b;

else
return

 

a;