1、LoadLibrary是把一个模块映射进调用进程的地址空间,需要时增加引用计数,每调用一次,引用计数增加一,需要通过相同步骤地调用FreeLibrary()来减少引用次数,当为0时,系统卸载DLL。
HMODULE WINAPI LoadLibrary(
__in LPCTSTR lpFileName
);
HMODULE WINAPI LoadLibrary(
__in LPCTSTR lpFileName
);
lpFileName 如果提供了路径(须使用backslashes(\),不要使用(/) ),则按照路径搜索,否则按照标准搜索方法去查找指定的执行文件名字。
如果指定文件名没有后缀,则默认追加".dll",如果名字以“.”结尾,则不追加。
2、GetModuleHandle是返回一个已经映射进调用进程地址空间的模块的句柄,并不增加引用计数。
HMODULE WINAPI GetModuleHandle(
__in_opt LPCTSTR lpModuleName
);
补充说明
LPCTSTR类型:
L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。P表示这是一个指针。C表示是一个常量。T表示在Win32环境中, 有一个_T宏。STR表示这个变量是一个字符串。
LPCTSTR表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。同样,LPCSTR就只能是一个ANSI字符串,在程序中我们大部分时间要使用带T的类型定义。LPCTSTR == const TCHAR * CString 和 LPCTSTR 可以说通用。 原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操作符重载而已。 常量字符串ansi和unicode的区分是由宏_T来决定的。但是用_T("abcd")时, 字符串"abcd"就会根据编译时的是否定一_UNICODE来决定是char* 还是 w_char*。 同样,TCHAR 也是相同目的字符宏。 看看定义就明白了。简单起见,下面只介绍 ansi 的情况,unicode 可以类推。
3、GetModuleFileName
【C++函数原型】: