(轉)VC中關於GlobalAlloc,GlobalLock,GlobalUnLock

來源:互聯網
上載者:User

調用GlobalAlloc函數分配一塊記憶體,該函數會返回分配的記憶體控制代碼。
調用GlobalLock函數鎖定記憶體塊,該函數接受一個記憶體控制代碼作為參數,然後返回一個指向被鎖定的記憶體塊的指標。 您可以用該指標來讀寫記憶體。
調用GlobalUnlock函數來解鎖先前被鎖定的記憶體,該函數使得指向記憶體塊的指標無效。
調用GlobalFree函數來釋放記憶體塊。您必須傳給該函數一個記憶體控制代碼。

GlobalAlloc

函數原型:
GlobalAlloc(UINT uFLAG,DWORD dwBytes);
說明
分配一個全域記憶體塊
傳回值
Long,返回全域記憶體控制代碼。零表示失敗。會設定GetLastError
參數表
參數 類型及說明
uFlags Long,對分配的記憶體類型進行定義的常數標誌,如下所示:
             GMEM_FIXED 分配一個固定記憶體塊
             GMEM_MOVEABLE 分配一個可移動記憶體塊
             GMEM_DISCARDABLE 分配一個可丟棄記憶體塊
             GMEM_NOCOMPACT 堆在這個函數調用期間不進行累積
             GMEM_NODISCARD 函數調用期間不丟棄任何記憶體塊
             GMEM_ZEROINIT 新分配的記憶體塊全部初始化成零
dwBytes Long,要分配的字元數
註解 
如指定了 GMEM_FIXED,那麼傳回值就是要使用的實際記憶體位址即指標(GlobalLock 會返回同樣的值)——所以在使用固定記憶體塊的時候不需要執行一個 GlobalLock/GlobalUnlock 操作
由於 Win32 採用了進階的記憶體管理方案,所以使用可移動的記憶體塊並沒有什麼好處
用這個函數分配的記憶體塊允許在8位邊界以內


GlobalLock 
函數功能描述:鎖定一個全域的記憶體對象,返回指向該對象的第一個位元組的指標
函數原型:
LPVOID GlobalLock( HGLOBAL hMem )
參數:
hMem:全域記憶體對象的控制代碼。這個控制代碼是通過GlobalAlloc或GlobalReAlloc來得到的
傳回值:
調用成功,返回指向該對象的第一個位元組的指標
調用失敗,返回NULL,可以用GetLastError來獲得出錯資訊
注意:
調用過GlobalLock鎖定一塊記憶體區後,一定要調用GlobalUnlock來解鎖。

GlobalUnlock
函數功能描述:解除被鎖定的全域記憶體對象
函數原型:BOOL GlobalUnlock( HGLOBAL hMem );
參數:hMem:全域記憶體對象的控制代碼
傳回值:
非零值,指定的記憶體對象仍處於被鎖定狀態
0,函數執行出錯,可以用GetLastError來獲得出錯資訊,如果返回NO_ERROR,則表示記憶體對象已經解鎖了
注意:    這個函數實際上是將記憶體對象的鎖定計數器減一,如果計數器不為0,則表示執行過多個GlobalLock函數來對這個記憶體對象加鎖,需要對應數目的GlobalUnlock函數來解鎖。
    如果通過GetLastError函數返回錯誤碼為ERROR_NOT_LOCKED,則表示未加鎖或已經解鎖。

樣本:
// Malloc memory
hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, nSize);
// Lock memory
pMem = (BYTE *) GlobalLock(hMem);
................
// Unlock memory
GlobalUnlock(hMem);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.