录或Windows 系统目录下。
使用显式链接应用程序编译时不需要使用相应的LIB 文件。另外,使用GetProcAddress()
函数时,可以利用MAKEINTRESOURCE()函数直接使用DLL 中函数出现的顺序号,如将
GetProcAddress(hDLL,"Min") 改为GetProcAddress(hDLL,MAKEINTRESOURCE(2)) ( 函数
Min()在DLL 中的顺序号是2),这样调用DLL 中函数的速度将会很快,但是要记住函数的使
用序号,否则会发生错误。
10.4 开发DLL
在Visual C++6.0 开发环境下,打开“FileNewProject”选项,可以通过选择Win32
Dynamic-Link Library 或MFC AppWizard[dll]的不同方式来创建Non-MFC Dll、Regular Dll、
Extension Dll 等不同种类的动态链接库。
10.4.1 创建Non-MFC DLL 动态链接库
每一个DLL 必须有一个入口点,这就像用C 编写的应用程序一样,必须有一个WinMain
函数一样。在Non-MFC DLL 中DllMain()是一个默认的入口函数,不需要编写自己的DLL
入口函数,用DllMain()函数就能使动态链接库在被调用时得到正确的初始化。如果应用程序
的DLL 需要分配额外的内存或资源时,或者说需要对每个进程或线程初始化和清除cāo作时,
需要在相应的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:
.......
case DLL_PROCESS_DETACH:
.......
}
return TRUE;
}
关于DllMain()函数,在10.2.1 节中已经作了详细介绍,这里不再赘述。DLL 是包含若
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·260·
干个函数的库文件,应用程序使用DLL 中的函数之前,应该先导出这些函数,以便供给应用
程序使用。要导出这些函数有两种方法, 一是在定义函数时使用导出关键字
_declspec(dllexport),另外一种方法是在创建DLL 文件时使用模块定义DEF 文件。需要读者
注意的是在使用第一种方法的时候,不能使用DEF 文件。下面通过两个例子来说明使用这两
松语文学免费小说阅读_www.1