我使用一些CComVariant類型變量來存儲接口pointers.However,有時我需要通過接口指針作爲NULL.In這種情況下,當我這樣做:VARIANT類型punkVal給出未定義的值?
CComVariant vAData,vBData;
......
....
CComQIPtr<IBData> pAData = vAData.punkVal; //vAData is {0, VT_I4} when I pass NULL
CComQIPtr<IBData>pBData = vBData.punkVal; //vBData is {0, VT_I4} when I pass NULL
第一線失敗並引發異常,因爲在vAData.punkVal = 0xffffffff00000000
但第二行通過罰款沒有錯誤,它有有效vBData.punkVal
值(0x0000000000000000)。
我想知道爲什麼兩個punkVal都不同時,當兩者都是空? 有沒有人知道爲什麼會發生這種情況? 僅在64位機器上拋出異常。
我正在做這樣的事情:'CComVariant vAData,vBData; vAData = CComVariant(NULL); vBData = CCOMVariant(NULL); CComQIPtr pAData = vAData.punkVal; CComQIPtr pBData = vBData.punkVal;'所以punkval仍然是未初始化的? –
Nikhil
2011-06-09 11:42:47
兩種情況下,punkval都未初始化,但第一行失敗,第二行給出有效地址。 – Nikhil 2011-06-09 11:51:42
@Nikhil:「未初始化」的意思是「你在那時得到的任何內容」。你真的關心爲什麼一個指針是空的而另一個不是? – sharptooth 2011-06-09 11:55:54