您的位置:首页 > 其它

加载dll以及卸载dll相关的几个API

2014-11-05 14:22 621 查看
普及一下知识:

(1)LoadLibrary函数将指定的DLL模块加载到进程的地址空间中。

调用成功,返回指定DLL文件的句柄,DLL句柄用来标识一个DLL文件。

调用失败,返回NULL。

HMODULE LoadLibrary(
LPCTSTR lpFileName   // file name of module要加载的dll名
);

(2)LoadLibraryEx函数也可以加载指定的DLL模块

调用成功,返回指定DLL文件的句柄,DLL句柄用来标识一个DLL文件。

调用失败,返回NULL。

HMODULE LoadLibraryEx(    LPCTSTR lpFileName,  // file name of module 要加载的DLL名
HANDLE hFile,           // reserved, must be NULL保留必须使用NULL
DWORD dwFlags     // entry-point execution option 指定加载模块时采取的动作);

参数dwFlags取值如下:

DONT_RESOLVE_DLL_REFERENCES   //不调用DLLMAIN函数。系统也不加载指定模块引用的其他模块
LOAD_LIBRARY_AS_DATAFILE      //系统将指定的模块作为数据文件映射到调用进程的虚拟地址空间中
LOAD_WITH_ALTERED_SEARCH_PATH  //使用替代搜索次序

附上更啰嗦的说明:

当调用LoadLibrary函数或者LoadLibraryEx函数时,系统会定位指定的DLL。

如果找到,则把DLL模块映射到进程的虚拟内存中,并增加DLL的引用计数。

如果指定的DLL已经映射到调用进程的虚拟内存中,函数只是返回DLL的句柄,并不增加DLL的引用计数。

然后系统会在LoadLibrary函数或者LoadLibraryEx函数的线程上下文中调用DLL的入口函数DLLMain()。

如果系统找不到DLL文件,或者DLL的入口函数DllMain返回FALSE,则LoadLibrary函数或者LoadLibraryEx函数返回NULL。

如果LoadLibrary函数或者LoadLibraryEx函数执行成功,返回DLL模块的句柄,DLL句柄可以用来标识一个DLL。

(3)GetModuleHandle函数也可以返回DLL模块句柄

调用成功,返回指定DLL文件的句柄,DLL句柄用来标识一个DLL文件。
调用失败,返回NULL。

HMODULE GetModuleHandle(    LPCTSTR lpModuleName   // module name 要加载的DLL文件名);

附上更啰嗦的说明:

只有当DLL模块映射到进程的虚拟地址空间中时,GetModuleHandle函数才能执行成功。

与LoadLibrary函数或者LoadLibraryEx函数不同,GetModuleHandle函数不能增加DLL模块的引用计数。

(4)GetProcAddress函数获取DLL的导出函数地址。

调用成功,返回指定导出函数的地址。
调用失败,返回NULL。

FARPROC GetProcAddress(    HMODULE hModule,    // handle to DLL module
LPCSTR lpProcName   // function name);


(5)

如果不再需要使用DLL模块,则可以调用FreeLibrary()函数或是FreeLibraryAndExitThread()函数释放DLL模块,
减少DLL模块的引用计数,如果引用计数等于0,则从进程的虚拟地址空间卸载DLL代码。

BOOL FreeLibrary(    HMODULE hModule   // handle to DLL module DLL模块句柄);//成功返回TRUE,失败返回FALSE。


FreeLibraryAndExitThread( )在释放DLL模块后终止调用线程。
VOID FreeLibraryAndExitThread(    HMODULE hModule,  // handle to the DLL module DLL模块句柄
DWORD dwExitCode  // exit code for thread );


The FreeLibraryAndExitThread function is implemented as:

FreeLibrary(hModule);
ExitThread(dwExitCode);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: