#define WM_H2P(hWin) ((WM_Obj*)GUI_ALLOC_h2p(hWin))
1.数据结构
#define GUI_ALLOC_SIZE 50000
#define GUI_MAXBLOCKS (2 + GUI_ALLOC_SIZE / 32)
typedef union {
int aintHeap[GUI_ALLOC_SIZE /4];
U8 abHeap[GUI_ALLOC_SIZE];
} GUI_HEAP;
typedef struct {
GUI_ALLOC_DATATYPE Off;
GUI_ALLOC_DATATYPE Size;
HANDLE Next;
HANDLE Prev;
} tBlock;
GUI_MEM_ALLOC GUI_HEAP GUI_Heap GUI_ALLOC_LOCATION;
static tBlock aBlock[GUI_MAXBLOCKS];
2.GUI_ALLOC_h2p()函数
void* GUI_ALLOC_h2p(GUI_HMEM hMem)
{
GUI_ASSERT_LOCK();
#if GUI_DEBUG_LEVEL > 0
if (!hMem)
{
GUI_DEBUG_ERROROUT("
"__FILE__ " GUI_ALLOC_h2p: illegal argument (0 handle)");
return 0;
}
if (aBlock[hMem].Size == 0)
{
GUI_DEBUG_ERROROUT("Dereferencing free block");
}
#endif
return HMEM2PTR(hMem);
}
3.HMEM2PTR()宏
#define HMEM2PTR(hMem) (void*)&GUI_Heap.abHeap[aBlock[hMem].Off]
来源: http://gliethttp.cublog.cn