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

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>
            在线免费观看一区二区三区| 亚洲一区中文| 免费在线成人av| 久久精品国产第一区二区三区最新章节| 国产欧美日韩一区二区三区在线观看 | 国产精品入口夜色视频大尺度| 亚洲午夜在线观看视频在线| 一区二区日韩免费看| 国产精品每日更新| 久久久欧美精品| 免费一区视频| 亚洲欧美www| 久久经典综合| 亚洲国产婷婷| 亚洲一区二区精品| 激情视频亚洲| 日韩视频在线观看国产| 国产精品视频九色porn| 噜噜噜躁狠狠躁狠狠精品视频| 欧美成人激情视频免费观看| 亚洲女性裸体视频| 久久久久久久久久久久久女国产乱 | 久久久久国产免费免费| 亚洲日本欧美在线| 午夜激情一区| 日韩午夜在线电影| 午夜在线电影亚洲一区| 日韩视频在线免费观看| 欧美一级视频免费在线观看| 妖精成人www高清在线观看| 亚洲男女自偷自拍图片另类| 亚洲国产精品第一区二区| 亚洲综合色在线| 日韩午夜av电影| 久久久精品国产一区二区三区| 亚洲毛片网站| 久久久久久久久综合| 亚洲在线视频免费观看| 美女999久久久精品视频| 亚洲欧美影院| 欧美日韩亚洲另类| 免费观看欧美在线视频的网站| 国产精品久久9| 亚洲国产精品成人| 一区二区在线看| 欧美在线www| 久久av在线| 国产精品成av人在线视午夜片| 亚洲高清视频一区| 怡红院精品视频在线观看极品| 亚洲制服av| 亚洲天堂网站在线观看视频| 欧美久久久久久蜜桃| 能在线观看的日韩av| 国产综合色在线| 欧美在线观看一区二区| 午夜精品国产| 欧美午夜激情在线| 一区二区欧美激情| 亚洲影视在线| 国产精品不卡在线| 在线一区二区三区做爰视频网站| 日韩一二三区视频| 欧美精品日日鲁夜夜添| 亚洲人成网站精品片在线观看| 亚洲精品久久久久| 欧美好吊妞视频| 亚洲人成网站777色婷婷| 日韩午夜激情av| 欧美日本三区| 一区二区三区精密机械公司| 亚洲一区二区在线播放| 国产精品国产精品| 午夜精品国产| 免费亚洲一区| 伊人精品久久久久7777| 老司机一区二区| 最新成人av网站| 亚洲婷婷综合色高清在线| 欧美视频中文一区二区三区在线观看 | 久久成人亚洲| 伊人久久大香线蕉综合热线| 美乳少妇欧美精品| 亚洲免费成人av电影| 午夜在线精品| 亚洲电影免费观看高清完整版| 久久综合999| 99re热这里只有精品免费视频| 小嫩嫩精品导航| 亚洲第一成人在线| 欧美精品免费在线| 亚洲欧美日韩另类| 欧美成人精品福利| 一本久久综合亚洲鲁鲁| 国产精品一区二区你懂得| 久久免费视频在线观看| 亚洲美女在线观看| 久久久国产一区二区| 亚洲精品影视| 国产精品高清网站| 久久躁狠狠躁夜夜爽| 宅男噜噜噜66一区二区| 另类成人小视频在线| 亚洲午夜一区二区| 玉米视频成人免费看| 欧美婷婷六月丁香综合色| 久久精品青青大伊人av| 一本色道久久88精品综合| 老巨人导航500精品| 亚洲欧美精品一区| 亚洲精品美女在线| 激情欧美日韩| 国产精品―色哟哟| 欧美黄网免费在线观看| 欧美一区二区国产| 一区二区91| 亚洲人成免费| 欧美高清在线一区二区| 欧美中日韩免费视频| 一区二区三区视频观看| 亚洲福利视频免费观看| 国产欧美日韩视频一区二区三区| 欧美精品国产一区二区| 久久久av毛片精品| 午夜精品亚洲| 午夜精品久久久久久久男人的天堂| 亚洲激情小视频| 亚洲第一二三四五区| 久久一区二区三区超碰国产精品| 午夜免费久久久久| 亚洲一区自拍| 亚洲欧美激情四射在线日| 99re这里只有精品6| 亚洲欧洲日韩在线| 亚洲国产精品一区| 亚洲国产高潮在线观看| 伊人婷婷欧美激情| 黄色在线成人| 在线观看视频日韩| 亚洲电影观看| 亚洲精品韩国| 一本到高清视频免费精品| 亚洲破处大片| 99在线精品视频| 正在播放亚洲一区| 亚洲欧美日韩一区在线| 亚洲欧美日韩一区二区三区在线| 亚洲尤物在线视频观看| 午夜精品美女久久久久av福利| 午夜精品久久久久久久| 香蕉av福利精品导航| 久久狠狠久久综合桃花| 久久综合给合| 欧美电影免费观看网站| 亚洲成人资源网| 亚洲乱码国产乱码精品精可以看 | 久久狠狠一本精品综合网| 欧美一区二区免费视频| 久久99伊人| 噜噜噜91成人网| 欧美日韩亚洲网| 国产欧美一区二区精品仙草咪| 好吊妞**欧美| 亚洲精品午夜| 亚洲欧美久久久| 牛牛影视久久网| 亚洲三级性片| 先锋影音久久| 欧美高清在线播放| 欧美先锋影音| 亚洲福利电影| 亚洲自啪免费| 欧美jizzhd精品欧美喷水| 亚洲激情在线激情| 亚洲一区激情| 美女网站在线免费欧美精品| 欧美日韩综合视频| 精品不卡一区二区三区| 一区二区三区高清不卡| 久久久久一区二区| 亚洲精品国产视频| 久久精品91| 国产精品扒开腿爽爽爽视频| 精品88久久久久88久久久| 一区二区三区高清在线观看| 久久综合五月| 亚洲一区二区视频在线| 久久在线免费视频| 国产精品一区一区三区| 亚洲精品美女久久7777777| 欧美制服丝袜第一页| 日韩亚洲欧美一区| 久久视频免费观看| 国产视频欧美| 亚洲尤物精选| 亚洲国产精品尤物yw在线观看 | 91久久嫩草影院一区二区| 欧美一区成人| 国产精品伦子伦免费视频| 99视频精品在线|