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

隨筆-90  評(píng)論-947  文章-0  trackbacks-0

最近有個(gè)東西,需要讀 XML 配置文件,于是用 msxml 做了。msxml 是基于 COM 的,使用之前需要 CoInitialize,使用之后需要 CoUninitialize。于是我寫(xiě)成了:

void foo()
{
    CoInitialize(NULL);

    // Reading configuration

    CoUninitialize();
}

剛才我正樂(lè)此不彼的把類似這樣的東西改成:

void foo()
{
    CoInitialize(NULL);
    LOKI_ON_BLOCK_EXIT(CoUninitialize);

    // Reading configuration
}

前面的同事過(guò)來(lái)看到了,說(shuō),你不該在這里調(diào)用 CoInitialize 和 CoUninitialize。如果有的地方也在用 COM,你這里 CoUninitialize 一下,別的地方就會(huì)出錯(cuò)了,上次的某個(gè) Bug 就是。

我狡辯道:我假定這里沒(méi)有多線程環(huán)境(實(shí)際上也是),并且約定別的地方用 COM 的時(shí)候調(diào)用 CoInitialize 時(shí)不要判斷返回值。

同事:應(yīng)該和大眾習(xí)慣保持一致,最好就是全項(xiàng)目最開(kāi)始的時(shí)候 CoInitialize 一次,結(jié)束的時(shí)候 CoUninitialize 一次。

我:我這里是較底層功能函數(shù)。

同事:可以以文檔的方式注明,使用該模塊前必須自己 CoInitialize,使用完畢后自己 CoUninitialize。

我:我只是想要用起來(lái)方便一點(diǎn),用的時(shí)候不要有那么多先決條件和后置條件。再說(shuō),人家本來(lái)可以不知道我用了 COM,我這么一說(shuō)明,就暴露了內(nèi)部信息了不是?

其實(shí)我被動(dòng)搖了。

各位大大,你們?cè)趺刺幚砟兀?/p>

------------------------------華麗的分割線(13:27 p.m. 增加)----------------------------------

好,既然 CoInitialize 和 CoUninitialize 有引用計(jì)數(shù)機(jī)制,那么這個(gè)具體問(wèn)題已經(jīng)解決。

那么,有沒(méi)有類似的成對(duì)使用的 API,會(huì)對(duì)進(jìn)程全局產(chǎn)生影響的呢?如果有,在底層要用到的時(shí)候該怎么處理?

posted on 2010-04-02 10:02 溪流 閱讀(25189) 評(píng)論(17)  編輯 收藏 引用 所屬分類: C++COM

評(píng)論:
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 10:21 | 游客~~
參照CoInitialize 的返回值,寫(xiě)個(gè)類,在夠函數(shù)中根據(jù)前邊的返回值情況判斷是否調(diào)用 CoUninitialize  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 10:22 | 游客~~
@游客~~
是析構(gòu)函數(shù) 剛才打錯(cuò)  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 11:07 | 陳梓瀚(vczh)
在某個(gè)cpp里面寫(xiě)

class FxxkCom
{
public:
FxxkCom()
{
CoInitialize();
}
~FxxkCom()
{
CoUninitialize();
}
} fxxkCom;  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 11:14 | WXX
你不該在這里調(diào)用 CoInitialize 和 CoUninitialize。如果有的地方也在用 COM,你這里 CoUninitialize 一下,別的地方就會(huì)出錯(cuò)了


這句話不對(duì),如果配對(duì)了應(yīng)該就不會(huì)有問(wèn)題。我的原則是這種調(diào)用盡量在線程的初始化和反初始化的時(shí)候做,其他時(shí)間盡量不做這種事情。  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 12:49 | 溪流
@陳梓瀚(vczh)
@WXX
這個(gè)會(huì)不會(huì)影響其它線程?  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 12:52 | 溪流
哦,好像只對(duì)當(dāng)前線程起作用。。。那問(wèn)題就沒(méi)有了,什么時(shí)候用什么時(shí)候調(diào)就可以了。

有沒(méi)有會(huì)影響整個(gè)進(jìn)程的這樣的成對(duì)的函數(shù)呢?  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 12:52 | berg
放心好了,這兩個(gè)函數(shù)內(nèi)部維護(hù)了引用計(jì)數(shù),只要配對(duì)使用就好。  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 13:22 | 溪流
@berg

果然!測(cè)試OK~~~  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 13:56 | Jakcie
類似于這樣的初始化,的確應(yīng)該放在整個(gè)工程的一開(kāi)始和最后比較好。
例如,CoInitializeEx,OleInitialize,WSAStartup之類的,一開(kāi)始就調(diào)用。最后釋放。一開(kāi)始如果調(diào)用不成功,也比較好處理。  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 15:56 | 溪流
@Jakcie
如果我在寫(xiě)庫(kù)/底層函數(shù)呢?  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 16:02 | OwnWaterloo
我也這么干過(guò):

class C{
C() {
CoInit()
}
~C() {
CoUnit()
}
...
};

為的也是讓其他代碼干凈一些, 不要引入那些丑陋的頭文件以及看到COM這么丑陋的東西。

全局?jǐn)?shù)據(jù)初始化有不同的設(shè)計(jì)方法。
如果內(nèi)部有引用技術(shù), 就可以這么干。
如果沒(méi)有, 就告訴C的使用者, 使用前需要怎樣, 使用后又怎樣。
  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-02 19:02 | 飛鴿傳書(shū)
最好在構(gòu)造與析構(gòu),可以保證他在先于控件創(chuàng)建,后于控件銷毀。  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2010-04-13 02:27 | 欲三更
這個(gè)是引用計(jì)數(shù)的,沒(méi)問(wèn)題。
想想看,如果這個(gè)函數(shù)沒(méi)有引用計(jì)數(shù),那會(huì)帶來(lái)無(wú)數(shù)的問(wèn)題。  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2011-02-28 10:24 | gggg
我測(cè)試過(guò),是沒(méi)有關(guān)系的,只要兩個(gè)東西配對(duì),你想怎么調(diào)用都可以  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2011-03-08 16:17 | 溪流
@fixdot
對(duì),當(dāng)時(shí)也是這樣的問(wèn)題。也是原因不明。可是既然原因不明,那么作為論據(jù)其實(shí)有問(wèn)題的。如果這兩個(gè)函數(shù)確實(shí)有引用計(jì)數(shù)的,那么應(yīng)該提倡用時(shí)CoInitialize,用完馬上CoUninitialize。除非能夠說(shuō)出“一個(gè)進(jìn)程里最好只調(diào)用一次”的道理。  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2011-03-08 18:50 | 溪流
@fixdot
為什么刪除了?  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2011-03-31 09:56 | Wallace
@溪流
我的程序里面怎么不行,一個(gè)是EXCEL的類,其構(gòu)造函數(shù)和析構(gòu)函數(shù)里有相關(guān)的初始化和釋放代碼,另一個(gè)是ADO操作數(shù)據(jù)庫(kù)的類,也有一對(duì)代碼,可是只要一輸出過(guò)EXCEL,那個(gè)ADO查詢數(shù)據(jù)庫(kù)的類就用不了。  回復(fù)  更多評(píng)論
  
# re: CoInitialize 和 CoUninitialize 的調(diào)用時(shí)機(jī)問(wèn)題 2011-10-10 10:39 | daixi
你的同事說(shuō)的是對(duì)的,最好是每個(gè)線程的開(kāi)始一次CoInitialize,退出的時(shí)候一次CoUninitialize。否則的確會(huì)出一些亂七八糟的問(wèn)題。曾經(jīng)在這個(gè)事情上吃過(guò)虧,最后的解決辦法就是只CoInitialize,不調(diào)CoUninitialize。哈哈哈哈。。。  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国内伊人久久久久久网站视频| 亚洲日本电影| 在线精品国产欧美| 精品99视频| 一区视频在线看| 亚洲国产91精品在线观看| 在线免费观看视频一区| 亚洲国产欧美精品| 亚洲美女黄网| 亚洲欧美日韩精品久久奇米色影视 | 午夜精彩视频在线观看不卡 | 在线成人免费观看| 亚洲美女av黄| 销魂美女一区二区三区视频在线| 欧美有码在线视频| 亚洲电影欧美电影有声小说| 中文精品视频一区二区在线观看| 欧美一区二区三区四区视频 | 亚洲视频香蕉人妖| 欧美综合第一页| 欧美精品色网| 海角社区69精品视频| 99国产精品久久久久老师| 亚洲欧美电影院| 欧美亚洲综合在线| 国产精品日产欧美久久久久| 欧美丰满高潮xxxx喷水动漫| 亚洲精品午夜| 久久九九精品| 欧美精品在欧美一区二区少妇| 国产精品久久网| 亚洲精品一级| 久久另类ts人妖一区二区| 亚洲人成绝费网站色www| 亚洲欧美综合v| 欧美视频在线一区二区三区| 亚洲国产精品va在看黑人| 欧美一区二区三区免费在线看| 91久久中文| 欧美gay视频| 在线日韩精品视频| 久久久久久久久久久久久女国产乱 | 好看不卡的中文字幕| 亚洲精品美女在线观看播放| 欧美在线看片| 亚洲天堂av高清| 欧美韩日亚洲| 亚洲娇小video精品| 久久一区中文字幕| 亚洲男人的天堂在线aⅴ视频| 欧美韩国一区| 亚洲精品在线二区| 久久综合九色综合欧美狠狠| 美女视频网站黄色亚洲| 久久精品人人做人人综合| 欧美国产欧美综合 | 久久久综合香蕉尹人综合网| 欧美福利在线观看| 亚洲大片在线观看| 久久久久久久久久码影片| 亚洲视频第一页| 欧美亚洲成人网| 亚洲午夜精品福利| 9l国产精品久久久久麻豆| 欧美人与性动交cc0o| 亚洲免费电影在线| 在线看视频不卡| 久久久蜜桃精品| 欧美日韩高清免费| 国产亚洲激情在线| 日韩一级大片在线| 亚洲国产精品成人va在线观看| 亚洲视频精选| 欧美日韩另类丝袜其他| 99精品视频免费观看视频| 亚洲电影在线免费观看| 久久综合网色—综合色88| 狠狠色狠狠色综合系列| 久久精品亚洲精品国产欧美kt∨| 欧美亚洲在线播放| 狠狠爱综合网| 欧美激情第五页| 欧美日本在线| 亚洲免费在线看| 久久国产一二区| 亚洲国产导航| 最新高清无码专区| 国产精品视频999| 久久亚洲高清| 欧美精品一区二区高清在线观看| 亚洲视频精品在线| 欧美中日韩免费视频| 亚洲黄网站黄| 亚洲视频在线观看网站| 一区二区亚洲精品国产| 亚洲国产欧美一区二区三区同亚洲 | 国产伦理一区| 久久偷看各类wc女厕嘘嘘偷窃| 老司机67194精品线观看| 中文精品视频| 久久久久9999亚洲精品| 中国成人亚色综合网站| 久久激情婷婷| 亚洲视频一起| 久久综合久久综合这里只有精品| 夜夜爽www精品| 久久久久成人精品免费播放动漫| 亚洲激情一区二区| 午夜国产不卡在线观看视频| 亚洲精品乱码久久久久久久久 | 国产麻豆日韩欧美久久| 欧美成人第一页| 国产麻豆成人精品| av成人免费| 亚洲开发第一视频在线播放| 欧美亚洲一区三区| 亚洲欧美在线一区| 亚洲国产日韩美| 中文一区二区| 日韩图片一区| 久热国产精品| 久久久噜噜噜久久中文字幕色伊伊| 欧美日本一道本| 久久亚洲综合网| 国产精品综合不卡av| 亚洲日本aⅴ片在线观看香蕉| 黄色免费成人| 欧美在线观看网站| 欧美一区网站| 国产精品亚洲不卡a| 正在播放欧美视频| 欧美成在线视频| 欧美国产乱视频| 影音先锋亚洲电影| 久久精品国产久精国产爱| 久久精品盗摄| 国产一区日韩欧美| 欧美怡红院视频一区二区三区| 亚洲欧美日韩一区在线| 欧美日韩精品综合| 日韩午夜av| 亚洲香蕉成视频在线观看| 欧美视频日韩| 亚洲性感激情| 久久精品国产亚洲a| 国产一区二区在线免费观看| 欧美亚洲三区| 久久天天躁狠狠躁夜夜爽蜜月| 国内外成人免费视频| 久久久国产精品一区二区中文 | 日韩一级大片| 欧美午夜片在线免费观看| 这里只有精品视频在线| 羞羞视频在线观看欧美| 韩国v欧美v日本v亚洲v| 久久久久久久网站| 最新亚洲视频| 亚洲综合色自拍一区| 国产欧美精品日韩精品| 久久精品一区二区国产| 欧美激情片在线观看| 亚洲午夜91| 国产午夜亚洲精品理论片色戒| 久久综合综合久久综合| 亚洲精品国产精品国自产观看| 亚洲欧美另类在线| 激情一区二区| 欧美精品一区在线发布| 亚洲欧美日韩综合aⅴ视频| 蜜臀av在线播放一区二区三区| 亚洲精选视频在线| 国产精品视频yy9299一区| 久久综合中文字幕| 亚洲一区二区三区午夜| 久久综合给合久久狠狠色| 99在线热播精品免费99热| 国产亚洲欧美一区| 欧美久久在线| 久久精品一区二区三区不卡| 99这里只有久久精品视频| 卡通动漫国产精品| 午夜精品福利视频| 亚洲另类自拍| 在线看片第一页欧美| 国产精品专区h在线观看| 欧美精品久久一区二区| 久久久一二三| 国产精品白丝黑袜喷水久久久| 久久av二区| 亚洲特黄一级片| 亚洲第一色在线| 久久久国产午夜精品| 亚洲欧美不卡| 在线亚洲美日韩| 亚洲一区二区三区四区视频| 亚洲国产精品99久久久久久久久| 欧美与欧洲交xxxx免费观看| 亚洲视频999| 日韩视频在线观看免费| 亚洲国产精品福利|