我重新看了下你的程式碼,很可能是這一處問題:
GlobalFree(hMem);
pStream->Release();
上面這兩句程式碼需要調換位置,一定要先呼叫pStream->Release()再呼叫GlobalFree(),GlobalFree函式將“嘗試釋放”掉hMem指向的記憶體,如果你的Release函式沒有呼叫,這塊記憶體的引用計數值仍是大於1的,將無法被GlobalFree成功釋放掉。
詳情請參考MSDN中對CreateStreamOnHGlobal函式的文件說明,當中有這樣一句
http://msdn.microsoft.com/ZH-CN/library/windows/desktop/aa378980(v=vs.85).aspx
Do not free the hGlobal memory handle during the lifetime of the stream object. IStream::Release must be called before freeing the memory handle.
根據msdn的文件,你上述兩句順序是肯定有問題的,所以請你更正一下再做除錯。如果執行之後還有問題,請再補充。
我重新看了下你的程式碼,很可能是這一處問題:
GlobalFree(hMem);
pStream->Release();
上面這兩句程式碼需要調換位置,一定要先呼叫pStream->Release()再呼叫GlobalFree(),GlobalFree函式將“嘗試釋放”掉hMem指向的記憶體,如果你的Release函式沒有呼叫,這塊記憶體的引用計數值仍是大於1的,將無法被GlobalFree成功釋放掉。
詳情請參考MSDN中對CreateStreamOnHGlobal函式的文件說明,當中有這樣一句
http://msdn.microsoft.com/ZH-CN/library/windows/desktop/aa378980(v=vs.85).aspx
Do not free the hGlobal memory handle during the lifetime of the stream object. IStream::Release must be called before freeing the memory handle.
根據msdn的文件,你上述兩句順序是肯定有問題的,所以請你更正一下再做除錯。如果執行之後還有問題,請再補充。