作者dcleft (pass the exam)
看板C_and_CPP
标题[问题] CLOSE_HANDLE 为何会有作用?
时间Tue Aug 4 09:24:02 2009
Win32的问题
HBITMAP 使用完後要CloseHandle
CloseHandle的意义是把handle里面的count - 1 等 count == 0
的时候才把物件删掉,这样没错吧?
可是我看 HBITMAP却是被定义成 void*
请问对一个void*要怎麽删他的count?
怎麽知道传进来的是什麽样的type?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.87.66.196
1F:推 yourdog:不管是那一种handle,把它看成故定大小的指标就好了 08/05 21:37
2F:推 yourdog:#define DECLARE_HANDLE(name) 08/05 21:45
3F:→ yourdog:struct name##__ { int unused; }; typedef struct name## 08/05 21:46
4F:→ yourdog:里面的unused 就是你说的类似count的东西吧 08/05 21:46
5F:→ yourdog:如果是这样 认何一种handle里面的count型态都是int 08/05 21:47
6F:→ yourdog:可能因为这样,closehandle不需要知道它的型态吧 08/05 21:48
7F:推 UNARYvvv:那个物件是由系统维护,count 也是 08/06 01:07
8F:→ UNARYvvv:CloseHandle 的时候会要求系统关闭这个 handle 所代表的 08/06 01:07
9F:→ UNARYvvv:物件,而系统会查询 handle table 找出该 handle 代表的 08/06 01:08
10F:→ UNARYvvv:物件以及其 reference count 再视情况决定是否释放 08/06 01:09
11F:推 UNARYvvv:所以那个 count 和程式码中的 HBITMAP 或 void* 型态没有 08/06 01:12
12F:→ UNARYvvv:关系 08/06 01:13