-
MAKEINTRESOURCE
鎖定
- 外文名
- MAKEINTRESOURCE
- 性 質
- 資源名轉換的宏
- 特 點
- 不存在釋放的問題
- 領 域
- 程序設計
MAKEINTRESOURCE簡介
VC的定義是(winuser.h):
#define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
#define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
#ifdef UNICODE
#define MAKEINTRESOURCE MAKEINTRESOURCEW
#else
#define MAKEINTRESOURCE MAKEINTRESOURCEA
用這個宏的主要原因是有的資源是用序號定義的,而不是字符串.所以要把數字轉換成字符串指針,然後再傳遞給LoadResource之類的函數,這樣才加載了資源.
要釋放資源(用LoadResource加載的)可以調用FreeResource函數把LoadResource返回的指針傳遞給FreeResource.
MAKEINTRESOURCE作用
是把一個"數字形ID",轉化為"字符串".但是執行前後,輸入的數據的內容和長度是不變的!它只不過就是C語言裏面"強制類型轉換"而已.
請看 Winuser.h 代碼:
#define MAKEINTRESOURCEW(i) (LPWSTR)((DWORD)((WORD)(i)))
#ifdef UNICODE
#define MAKEINTRESOURCE MAKEINTRESOURCEW
#else
#define MAKEINTRESOURCE MAKEINTRESOURCEA
現在,再來歸納它的用法.就用FindResource來説明.(這個函數與MFC的AfxFindResourceHandle)
HRSRC FindResource(HMODULE hModule, // module handleLPCTSTR lpName, // resource nameLPCTSTR lpType // resource type);
就是lpName參數需要使用MAKEINTRESOURCE ,因為它需要LPCTSTR類型的參數輸入.那麼,情況就很清楚了.凡涉及"資源"的API或者MFC類,在參數類型為LPCTSTR時,就應該使用 MAKEINTRESOURCE.這是針對"資源名字"為"數字類型"時的情況.