HGLOBAL

HGLOBAL是兼容以前windows 3.x時代的16位記憶體分配API的數據,表示一個記憶體塊,這個記憶體塊是GlobalAlloc分配的,需要GlobalLock才能取得記憶體塊的指針。

基本介紹

  • 外文名:HGLOBAL
  • 兼容:以前windows 3.x時代
  • 表示:一個記憶體塊
  • 屬於:GlobalAlloc分配的
HGLOBAL,例子,

HGLOBAL

不過在Win32下,這個數據和Global記憶體分配函式沒有用了,保留下來只是為了兼容。而且在Win32下,HGLOBAL就是一個void *的指針,可以不用GlobalLock直接使用來訪問記憶體。
注意:但是某種特定情況下還是需要使用GlobalAlloc 和 HGLOBAl ,如CreateStreamOnHGlobal、CoTaskMemAlloc 這種特定情況下非用不可
HGLOBAL 這個是windows 定義的數據類型。
這是個句柄,標示一個記憶體區,不是指針。在對記憶體區的操作中,一般用指針,從這個handle可以得到指針,然後就可以對記憶體區進行操作了。

例子

GlobalUnlock函式解除鎖定的記憶體塊,使指向該記憶體塊的指針無效,GlobalLock鎖定的記憶體,一定要用GlobalUnlock解鎖
--------------------------------------------------
eg: 開一個200byte的記憶體區,在裡面賦值
HGLOBAL hMemHandle=::GlobalAlloc(GHND,50*sizeof(int)); //得到handle
int *p=(int *)::GlobalLock(hMemHandle); //從handle得到指針
for(int k=0;k<50;k++) *(p+k)=k;
char s[128];
sprintf(s,"testing:p[49]=%i",p[49]);
::GlobalUnlock(hMemHandle); //
::GlobalFree(p);
AfxMessageBox(s);
開闢一個新的記憶體區域,用一指針指向此地址區域,通過指針完成對記憶體區域的操作。記住用指針指向的時候要 ::GlobalLock(), 操作完成後,::GlobalUnlock()此記憶體區域的句柄,然後,::GlobalFree()掉此指針。

相關詞條

熱門詞條

聯絡我們