模組控制代碼(例項控制代碼)和控制代碼的區別

2021-08-04 07:30:09 字數 1445 閱讀 5750

解釋一:

1.模組的概念

乙個模組代表的是乙個執行中的exe檔案或dll檔案,用來代表這個檔案中所有的**和資源,磁碟上的檔案不是模組,裝入記憶體後執行時就叫做模組。乙個應用程式呼叫其他dll中的api時,這些dll檔案被裝入記憶體,就產生了不同的模組,為了區分位址空間中的不同模組,每個模組都有乙個惟一的模組控制代碼來標識。win16,win16中不同執行程式的位址空間並非是完全隔離的,乙個可執行檔案執行後形成"模組",多次載入同乙個可執行檔案時,這個"模組"是公用的,為了區分多次載入的"拷貝",就把每個"拷貝"叫做例項,每個例項均用不同的"例項控制代碼"(hinstance)值來標識它們。但在win32中,程式執行時是隔離的,每個例項都使用自己私有的4 gb空間,都認為自己是惟一的,不存在乙個模組的多個例項的問題,實際上在win32中,例項控制代碼就是模組控制代碼,但很多api原型中用到模組控制代碼的時候使用的名稱還是沿用hinstance,所以我們還是把變數名稱取為hinstance。

在c語言的程式設計中,hinstance通過winmain由系統傳入,winmain的原型是:

winmain(hinstance,hprevinstance,lpzcmdparam,ncmdshow),程式不用自己去獲得hinstance,這個過程由c的初始化**代勞了,但在win32彙編中hinstance必須自己獲取,如果不了解hmodule就是hinstance的話,就無法得知如何得到hinstance,因為並沒有乙個類似於getinstancehandle之類的api函式。

2.控制代碼是什麼

隨著分析的深入,控制代碼(handle)一詞也出現得頻繁起來,"控制代碼"是什麼呢?控制代碼只是乙個數值而已,它的值對程式來說是沒有意義的,它只是windows用來表示各種資源的編號而已,可見只有windows才知道怎麼使用它來引用各種資源。

下面舉例說明。螢幕上已經有10個視窗,windows把它們從1到10編號,應用程式又建立了乙個視窗,現在windows把它編號為11,然後把11當做視窗控制代碼返回給應用程式,應用程式並不知道11代表的是什麼,但在操作視窗的時候,把11當做控制代碼傳給windows,windows自然可以根據這個數值查出是哪個視窗。當該視窗關閉的時候,11這個編號作廢。第二次執行的時候,如果螢幕上現有5個視窗,那麼現在控制代碼可能就是6了,所以,應用程式並不用關心控制代碼的具體數值是多少。打個比方,可以把控制代碼當做是商場中寄放書包時營業員給的紙條,紙條上的標記使用者並不知道是什麼意思,但把它交還給營業員的時候,她自然會找到正確的書包。

windows中幾乎所有的東西都是用控制代碼來標識的,檔案控制代碼、視窗控制代碼、執行緒控制代碼和模組控制代碼等,同樣道理,不必關心它們的值究竟是多少,拿來用就是了!

解釋二:

在windows下,模組指的是exe和dll等資料載入到記憶體中的影像,模組控制代碼又是比較特殊的,它跟一般的控制代碼不一樣,模組控制代碼指向的就是exe和dll等的在記憶體的位置(就是指向它們的資料起始位置);程序控制代碼只是windows用來標識某個程序的id值罷了,在內部,windows使用一種類似map的技術來進行對映的,就是通過這個程序控制代碼來找到指定程序在記憶體的位置

關於sql事務和例項控制代碼和視窗控制代碼等新名詞整理。

目前在研究高併發socket伺服器的入門。接觸到了幾個新的名詞,我會一一在這個頁面上整理,供以後參考。一 sql事務 1 事務 transaction 是並bai發控制的單位,是使用者定義的一du個操作序列。這些操作要麼zhi都做dao,要麼都不做,是乙個不可分割的工作單位。通過事務,sql ser...

控制代碼和偽控制代碼

控制代碼的由來 從visual c 的標頭檔案來看,handle被typedef為void的指標,那是指向未確定資料結構的指標 typedef void handle 但是這並不說明任何問題,因為控制代碼遠遠不只是指向任意資料型別的指標。它是指向資料物件指標的指標。控制代碼的使用 於早期的windo...

什麼是控制代碼?指標和控制代碼的區別

控制代碼在windows程式設計中是乙個很重要的概念,在許多地方都扮演著重要的角色。在windows環境中,控制代碼是用來標識專案的,這些專案包括 1 模組 module 2 任務 task 3 例項 instance 4 檔案 file 5 記憶體塊 block of memory 6 選單 me...