青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 29, comments - 16, trackbacks - 0, articles - 0
   :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
如果你用C++來編寫COM,那么你將必不可少的使用這三個類型。使用這三種wrapper class毫無疑問會簡化我們的編程,使得使用SAFEARRAY, VARIANT和BSTR簡單。但是,使用這三個類型依然需要小心,因為使用不當的話,就會造成內存泄漏,或效率降低。

1. 如果拷貝兩個BSTR
假如我們一個BSTR,這個時候我希望復制一份BSTR,并丟棄之前的BSTR。通常我們會這么寫:
CComBSTR StringToBSTR(const string & sVal)
{
     CComBSTR bstrValue 
= sVal.data();
     
return bstrValue;
}

int main()
{
     CComBSTR vValue 
= StringToBSTR("value");

     
return 0;
}

當然,上面這個程序沒有任何問題,不會有任何內存泄漏的可能。但是,你有沒有上面代碼里都發生了什么了?
答案很簡單,在函數StringToBSTR里面,講bstrValue返回的時候,會調用CComBSTR::Copy(),在Copy()里面將會調用
 ::SysAllocStringByteLen()
這個函數。而后在給vValue賦值的時候,又 會調用一次
::SysAllocString()
顯而易見,開銷很大。

那么,我們將怎么改進這段代碼了?
BSTR StringToBSTR(const string & sVal)
{
     CComBSTR bstrValue 
= sVal.data();
     
return bstrValue.Detach();
}

int main()
{
     CComBSTR vValue.Attach(StringToBSTR(
"value"));

     
return 0;
}
這樣,通過CComBSTR::Detach(),我們將BSTR返回回來,通過CComBSTR::Attach(),我們將BSTR指針存儲起來。這樣,就減小了兩次開銷,大大提高了效率,也不會造成內存效率。

2. 如何使用CComSafeArray
使 用CComSafeArray的一個最大的好處,就是它會自動釋放元素是VARIANT和BSTR。也就是說,如果你的類型是VARIANT,它會自動調 用::VariantClear()。如果你的類型是BSTR,他會自動調用::SysStringFree()方法。但是使用它的時候,同樣要小心。
2.1 成對使用::SafeArrayAccessData()和::SafeArrayUnaccessData()
我們有時候會這樣使用CComSafeArray的元素:
void DoSomething()
{
     CComSafeArray
<double> pSafeArray(3);
     
double * pVal = NULL;
     ::SafeArrayAccessData(pSafeArray
.m_psa, (void**)&pVal);

     
//handle the elements through the pVal;
}
因為::SafeArrayAccessData 方法會在SFAEARRAY上給lock加1. 如果上面程序顯示調用CComSafeArray::Destroy()函數,你檢查它返回來的HRESULT的時候,應該是下面的值:
        hr    0x8002000d 內存已鎖定。     HRESULT
如果你不仔細檢查,那么將造成CComSafeArray沒有釋放。
2.2 從CComSafeArray轉為成CComVariant
有時候我們使用CComVariant包裝SAFEARRY。你會這樣寫代碼:
void DoSomething()
{
     CComSafeArray
<double> pSafeArray(3);
    
     
//fill the safearray

     CComVariant v 
= pSafeArray.Detach();
}
你可能會任務CComVariant會存儲pSafeArray的指針。可惜,你錯了。
CComVariant會調用::SafeArrayCopy 來完成賦值操作。而你的pSafeArray已經調用了Detach()操作,那么它里面的SAFEARRAY就變成了孤兒,沒有人去釋放它了。
那么你應該怎么寫了?
你可以這么寫:
void DoSomething()
{
     CComSafeArray
<double> pSafeArray(3);
    
     
//fill the safearray

     CComVariant v 
= pSafeArray.m_psa;
}
這樣,CComVariant會調用::SafeArrayCopy 來完成復制操作,而CComSafeArray也會保證在析構的時候釋放里面的SAFEARRAY。

使用上面三個wrapper類,確實可以很方便我們編程,也能避免很多memory leak。但是,使用他們同樣要小心,不然,同樣會造成性能損失,或者,更糟糕的,內存泄漏。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品国产品国语在线app | 久久久久九九视频| 在线一区免费观看| 亚洲特级毛片| 亚洲午夜精品17c| 亚洲欧美中文在线视频| 久久高清福利视频| 久久午夜视频| 欧美日韩国产成人在线免费| 欧美亚州一区二区三区| 国产欧美日韩亚洲精品| 精品成人一区二区三区四区| 亚洲国产日韩欧美在线动漫| 亚洲最新色图| 久久精品视频免费播放| 亚洲一区二区三区四区视频| 亚洲一区二区精品| 午夜综合激情| 裸体一区二区| 国产精品va在线播放我和闺蜜| 国产精品日韩精品欧美精品| 狠狠入ady亚洲精品经典电影| 亚洲精品系列| 久久精品久久99精品久久| 亚洲第一页在线| 这里只有精品视频在线| 欧美一区二区三区免费视频| 欧美在线日韩精品| 亚洲激情视频| 久久激情五月丁香伊人| 欧美日韩在线视频一区| 伊人久久婷婷色综合98网| 亚洲图片欧洲图片日韩av| 噜噜噜久久亚洲精品国产品小说| 亚洲美女91| 老**午夜毛片一区二区三区| 国产精品女主播| 亚洲精品视频啊美女在线直播| 先锋亚洲精品| 99国产一区二区三精品乱码| 久久亚洲私人国产精品va| 国产精品午夜久久| 一区二区三区久久久| 欧美成人一区二区在线| 欧美在线免费观看亚洲| 国产精品进线69影院| 亚洲免费电影在线| 亚洲高清三级视频| 美日韩精品视频| 在线看国产一区| 久久嫩草精品久久久精品| 亚洲欧美日产图| 国产精品视频xxxx| 午夜视频久久久| 亚洲欧美怡红院| 国产免费亚洲高清| 午夜亚洲性色福利视频| 中文av字幕一区| 国产精品高精视频免费| 亚洲一区二区精品在线| 中日韩高清电影网| 亚洲精品久久久久久久久久久久久 | 久久久综合网| 欧美在线高清视频| 国产中文一区二区| 蜜臀av性久久久久蜜臀aⅴ| 久久久夜色精品亚洲| 尹人成人综合网| 欧美国产日本高清在线| 欧美国产一区二区三区激情无套| 亚洲日本va在线观看| 国产精品www网站| 亚洲天天影视| 亚洲欧美日韩另类| 国内免费精品永久在线视频| 麻豆av福利av久久av| 久久只精品国产| 亚洲精品中文字幕在线| 一级日韩一区在线观看| 国产精品久久夜| 久久综合福利| 欧美另类人妖| 久久国产黑丝| 嫩草国产精品入口| 亚洲一区欧美| 欧美一区二区福利在线| 亚洲福利电影| 在线一区二区三区四区五区| 国内久久精品视频| 亚洲精品在线二区| 国产亚洲精品综合一区91| 欧美高潮视频| 国产精品国产自产拍高清av| 久久五月婷婷丁香社区| 欧美日韩久久| 另类酷文…触手系列精品集v1小说| 欧美xart系列高清| 欧美在线电影| 欧美日韩国产在线看| 久久久999精品| 欧美日韩成人综合| 美女国内精品自产拍在线播放| 欧美日本一道本| 久久精品视频导航| 欧美日韩专区| 欧美激情1区| 国产亚洲在线| 亚洲一区二区av电影| 亚洲大片av| 欧美一区二区视频在线观看2020| 亚洲精品一区二区在线| 欧美一区二区成人| 亚洲免费在线视频| 欧美精品一区二区三区一线天视频| 久久精品欧美| 国产精品五区| 在线中文字幕日韩| 亚洲视频免费| 欧美日韩国产色视频| 亚洲高清视频在线| 亚洲国产成人精品女人久久久| 午夜一区二区三区不卡视频| 免费不卡视频| 男人插女人欧美| 精品51国产黑色丝袜高跟鞋| 亚洲欧美一区二区三区极速播放 | 日韩视频免费看| 最新日韩欧美| 免费成人高清在线视频| 久久午夜精品一区二区| 国产婷婷精品| 午夜宅男久久久| 久久九九99视频| 欧美激情二区三区| 99re66热这里只有精品3直播 | 宅男噜噜噜66一区二区66| 欧美日韩在线播放| 免费成人av| 国产婷婷色一区二区三区四区| 亚洲乱亚洲高清| 亚洲另类黄色| 欧美激情第3页| 亚洲欧洲一区二区三区在线观看| 国产精品日韩一区二区| 亚洲午夜国产一区99re久久| 亚洲午夜黄色| 欧美日韩午夜视频在线观看| 9久草视频在线视频精品| 亚洲一区国产精品| 欧美亚男人的天堂| 亚洲欧美春色| 久久午夜电影网| 狠狠色狠狠色综合日日91app| 欧美一区二区播放| 美女黄毛**国产精品啪啪| 在线精品在线| 欧美精品亚洲精品| 亚洲色图在线视频| 久久精品一本| 亚洲精品看片| 国产精品视频| 老司机成人在线视频| 日韩一区二区免费高清| 欧美影院视频| 亚洲国产专区校园欧美| 欧美日韩视频第一区| 亚洲一区黄色| 蜜臀va亚洲va欧美va天堂| 一本久道久久综合婷婷鲸鱼| 国产日产欧美一区| 免费不卡在线观看av| 一本色道久久88精品综合| 欧美中文字幕在线播放| 亚洲国产精品毛片| 国产精品你懂的在线欣赏| 久久综合激情| 一区二区三区日韩精品| 蜜臀a∨国产成人精品| 亚洲午夜在线观看视频在线| 激情视频亚洲| 国产精品嫩草99av在线| 欧美国产大片| 欧美在线亚洲| 一区二区三区欧美成人| 亚洲国产精品黑人久久久 | 亚洲成色最大综合在线| 亚洲在线观看视频| 亚洲激情视频网站| 国产亚洲精品aa午夜观看| 欧美久久久久久久| 久久久青草青青国产亚洲免观| 亚洲天堂第二页| 亚洲国产精品va在看黑人| 久久综合一区二区| 欧美一区三区三区高中清蜜桃| 一区二区av在线| 一区二区三区四区五区在线| 免费观看成人网| 日韩午夜激情| 国产欧美1区2区3区|