• <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>

            小步慢跑

             

            richedit 打開包含 ole 對象 的大文件出現(xiàn)“內(nèi)存不足”

            起因是我在ocx中封裝了一個 richedit2.0 控件,并自己寫了一個 用于顯示圖片 ole 對象 。在我的ocx中插入大量的ole對象,大約3000個,然后保存為rtf。再使用我的ocx控件打開這個rtf時,會提示 內(nèi)存不足。跟蹤代碼時發(fā)現(xiàn)在我實現(xiàn)的  IRichEditOleCallback 接口的 GetNewStorage(LPSTORAGE* lplpstg) 中報錯。

            我的程序中創(chuàng)建 IStorage的思路是,在   IRichEditOleCallback 接口初始化時調(diào)用 StgCreateDocfile 創(chuàng)建一個根 Istorage,以后每個對象插入的時候   IRichEditOleCallback 的  GetNewStorage 接口被調(diào)用,在 GetNewStorage 方法中 在   根 Istorage 下建立一個subStroage。 



            HRESULT hResult = ::StgCreateDocfile(NULL,STGM_TRANSACTED|STGM_READWRITE | STGM_SHARE_EXCLUSIVE |STGM_CREATE ,
            0, &m_pStorage );


            //建立一個sub storage

            WCHAR tName[50] = {0};
             swprintf(tName, L"substorage%d", m_iNumStorages);

            HRESULT hResult = pStorage->CreateStorage(tName,
            STGM_TRANSACTED|STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE ,
            0, 0, lplpstg );


            后來發(fā)現(xiàn) 把  STGM_TRANSACTED 標(biāo)識去掉就可以了。有點莫名其妙,估計是事務(wù)的處理會導(dǎo)致內(nèi)存的占用增加的緣故吧。

            另外 在msdn 中 搜索 STGM ,注意紅色的字體,也就是收 使用com中的 IStorage 接口,是不能創(chuàng)建具有  STGM_TRANSACTED 表示的 IStream對象的 

            STGM_TRANSACTED
            In transacted mode, changes are buffered and written only if an explicit commit operation is called. To ignore the changes, call the Revert method in the IStream, IStorage, or IPropertyStorage interface. The COM compound file implementation of IStorage does not support transacted streams, which means that streams can be opened only in direct mode, and you cannot revert changes to them, however transacted storages are supported. The compound file, stand-alone, and NTFS file system implementations of IPropertySetStorage similarly do not support transacted, simple property sets because these property sets are stored in streams. However, transactioning of nonsimple property sets, which can be created by specifying the PROPSETFLAG_NONSIMPLE flag in the grfFlags parameter of IPropertySetStorage::Create, are supported.

            posted on 2012-07-13 09:43 zaccheo 閱讀(1255) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類(23)

            隨筆檔案(26)

            文章分類(1)

            文章檔案(1)

            csdn

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲精品美女久久久久99小说| 久久精品99久久香蕉国产色戒| 一级a性色生活片久久无少妇一级婬片免费放| 狠狠精品久久久无码中文字幕| 亚洲国产日韩欧美久久| 日批日出水久久亚洲精品tv| 狠狠色噜噜色狠狠狠综合久久| 久久天天躁狠狠躁夜夜96流白浆| 91久久福利国产成人精品| 伊人久久大香线蕉亚洲| 国产日韩欧美久久| 狠狠干狠狠久久| 无码日韩人妻精品久久蜜桃| 热久久国产欧美一区二区精品| 国产精品一久久香蕉国产线看| 伊人久久大香线蕉精品不卡| 国产69精品久久久久99尤物| 国产午夜久久影院| 久久久亚洲欧洲日产国码aⅴ| 人人妻久久人人澡人人爽人人精品 | 久久久久国产精品麻豆AR影院| 性高湖久久久久久久久| 亚洲精品视频久久久| 久久丝袜精品中文字幕| 国产成人精品久久亚洲高清不卡 | 久久久国产精品亚洲一区 | 久久久精品人妻一区二区三区蜜桃 | 久久精品免费大片国产大片| 久久国产精品无码一区二区三区| 影音先锋女人AV鲁色资源网久久| 久久精品国产欧美日韩99热| 久久精品一区二区三区中文字幕| 久久久久夜夜夜精品国产| 99久久精品费精品国产一区二区| 久久久久久国产精品无码超碰| 麻豆AV一区二区三区久久| 中文字幕无码精品亚洲资源网久久| 久久国内免费视频| 99精品国产99久久久久久97| 久久综合九色综合网站| 久久精品国内一区二区三区|