2012-04-18 26 views
0

GetBitmap()獲得返回碼爲0的可能原因是什麼?CBitmap :: GetBitmap失敗

BITMAP bmInfo; 
int rc = bitmap->GetBitmap (&bmInfo); 
int ec = GetLastError(); 

通過GetLastError()返回的值也爲0。MSDN沒有給予任何幫助和所有有類似的問題已經被問論壇是沉默。

給你一些情況下,我的CBitmap的一個實例,我使用類似於下面的代碼安裝的CBitmap的第二個實例相同的HBITMAP:

CBitmap first; 
: 
: 
CBitmap second; 
second.Attach ((HBITMAP)first); 

BITMAP bmInfo; 
second.GetBitmap (&bmInfo); 

GetBitmap()呼籲second失敗而不是first

+0

將擁有該對象的句柄附加到另一個對象成爲新所有者是不安全的。最終其中一人將擁有無效的手柄。 – 2012-04-18 10:37:27

+0

@RomanR。,這是一個有效的評論,但上面的代碼是我試圖做的簡化版本。所以,我正在考慮每個對象何時被銷燬。 – Jaywalker 2012-04-18 10:42:24

回答

1

對GetBitmap()的調用第二次失敗,而不是第一次。

如果是這樣,那麼這兩個類實例都不會擁有相同的句柄,並且您的代碼片段正好說明了這一點。你可以打破調試器檢查你的firstsecond找出他們實際上藏在裏面。

+0

你的回答暗示了我爲'HBITMAP'完成的類型轉換,這是罪魁禍首。非常感謝!我仍然想知道爲什麼'GetLastError()'返回0.它不應該給我附加呼叫上的無效句柄嗎? – Jaywalker 2012-04-18 11:19:06

+0

爲了避免查看源代碼而猜測袖口,我會說你的'CBitmap'可能持有'NULL',GetBitmap根本就不會調用API。因此,'GetLastError'仍然會保持過去的成功結果。 – 2012-04-18 11:21:04