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++函數原型】: