看板 C_and_CPP 關於我們 聯絡資訊
Win32的問題 HBITMAP 使用完後要CloseHandle CloseHandle的意義是把handle裡面的count - 1 等 count == 0 的時候才把物件刪掉,這樣沒錯吧? 可是我看 HBITMAP卻是被定義成 void* 請問對一個void*要怎麼刪他的count? 怎麼知道傳進來的是什麼樣的type? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.66.196
yourdog:不管是那一種handle,把它看成故定大小的指標就好了 08/05 21:37
yourdog:#define DECLARE_HANDLE(name) 08/05 21:45
yourdog:struct name##__ { int unused; }; typedef struct name## 08/05 21:46
yourdog:裡面的unused 就是你說的類似count的東西吧 08/05 21:46
yourdog:如果是這樣 認何一種handle裡面的count型態都是int 08/05 21:47
yourdog:可能因為這樣,closehandle不需要知道它的型態吧 08/05 21:48
UNARYvvv:那個物件是由系統維護,count 也是 08/06 01:07
UNARYvvv:CloseHandle 的時候會要求系統關閉這個 handle 所代表的 08/06 01:07
UNARYvvv:物件,而系統會查詢 handle table 找出該 handle 代表的 08/06 01:08
UNARYvvv:物件以及其 reference count 再視情況決定是否釋放 08/06 01:09
UNARYvvv:所以那個 count 和程式碼中的 HBITMAP 或 void* 型態沒有 08/06 01:12
UNARYvvv:關係 08/06 01:13