-
HINSTANCE
鎖定
一般用於window窗口程序, 在win32下與HMODULE是相同的東西,在Win32下還存在主要是因為win16
- 外文名
- HINSTANCE
- 類 型
- “句柄型”數據類型
HINSTANCE定義
HINSTANCE 是“句柄型”數據類型。相當於裝入到了內存的資源的ID。HINSTANCE對應的資源是instance.句柄實際上是一個 無符號長整數。但它是“句柄型”,所以你不能把它當成真的無符號長整數,拿來派別的用處,例如,不能拿來做四則運算。HINSTANCE常出現在 API 程序:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) { //這裏放API主程序內容 if(!InitWindowsClass(hInstance)) return FALSE; if(!InitWindows(hInstance, nCmdShow)) return FALSE; ShowWindow(hWndMain, nCmdShow); .... } BOOL InitWindowsClass(HINSTANCE hInstance) { WNDCLAS Swndclass; .... wndclass.hIcon = LoadIcon(hInstance, "abcd.ico"); wndclass.hInstance = hInstance; ..... } //子程序: BOOL InitWindows(HINSTANCEh Instance, int nCmdShow) { HWND hWnd; .... hWnd = CreateWindow("WindowsFill", str, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); .... }
HINSTANCE主要區別
程序使用HINSTANCE來區別task。
HINSTANCE 在win32下與HMODULE是相同的東西,在Win32下還存在主要是因為win16
程序使用HINSTANCE來區別task。
HWND 是窗口句柄
熟悉C編程的人都知道main函數帶有2個參數:argc和argv,完整的main函數定義是:int main(int argc, char *argv[ ])。argc指示程序啓動時命令行參數的個數,argv則包含具體的參數字符串。
如果有程序叫“hello.exe”,直接啓動時,argc=1, argv[0]=hello.exe。
如果以“hello.exe readme.txt”的形式啓動,argc=2, argv[0]=hello.exe, argv[1]=readme.txt
通過這兩個參數,程序可以獲知自身在啓動時的命令行信息。
而在WinMain函數中,帶有4個參數,分別是:hInstance, hPrevInstance, lpCmdLine, nShowCmd。今天就探討hInstance的含義。
hInstance是程序的當前實例的句柄。在Windows這樣的多任務操作系統中,一個程序可以同時運行多個實例。不同的實例間需要彼此區別,句柄就是幹這個的。
我們想辦法把句柄指示的信息顯示出來,用LoadString函數,格式為:
int LoadString( HINSTANCE hInstance, UINT uID, LPTSTR lpBuffer, int nBufferMax );
其中第2個參數uID,表示裝載(Load)的是第幾個信息。下面的程序將把程序的名稱(IDS_APP_TITLE)信息顯示在消息窗口中。
//second.cpp:定義應用程序的入口點。 // // //第2個例子 //吳新2008/01/06 #include"stdafx.h" #include"second.h" intAPIENTRY_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { const int BUFSIZE=256; TCHAR wAppTitle[BUFSIZE]; //初始化全局字符串 LoadString(hInstance,IDS_APP_TITLE,wAppTitle,BUFSIZE); //獲取桌面句柄 HWND hWnd=GetDesktopWindow(); //將wAppTitle顯示在消息窗口中 MessageBox(hWnd,wAppTitle,_T("第2個例子"),MB_OK); return0; }
程序運行後將顯示如下的窗口:
HINSTANCE補充信息
hInstance是操作系統分配給實例的指針,程序根據hInstance訪問其相應的內存空間
hInstance是操作系統分配給程序自身實例的句柄.句柄是用來標識實例的,句柄是實例指針的索引. 通過句柄能找到實例的地址.
HINSTANCE hInstance;是應用程序的實例句柄
獲取方法 HINSTANCE AfxGetInstanceHandle( );
或者AfxGetApp( );
得到一個CWINAPP類的指針,其中有該句柄的成員
nCmdShow,你有SDK經驗就知道,它是主窗口的狀態,也就是WinMain(...)的參數之一
實際上HINSTANCE並非純粹意義上的句柄(HANDLE),因為它實際上是由物理PE文件映射到WINDOWS進程的虛擬模塊首地址,這個地址上包含了PE頭信息和PE文件映射後的具體內容,微軟將之作為句柄來體現在原因在於PE頭過於複雜,使用者直接對PE結構進行訪問不安全,這種編程手法在C語言編程中很常見,對於使用者而言,HINSTANCE的意義在於對WINDOWS資源進行訪問,也可以將它作為HMODULE來訪問模塊的導出函數等等。
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:33次歷史版本
- 最近更新: aka卡布达121