• <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 對象 的大文件出現“內存不足”

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

            我的程序中創建 IStorage的思路是,在   IRichEditOleCallback 接口初始化時調用 StgCreateDocfile 創建一個根 Istorage,以后每個對象插入的時候   IRichEditOleCallback 的  GetNewStorage 接口被調用,在 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 );


            后來發現 把  STGM_TRANSACTED 標識去掉就可以了。有點莫名其妙,估計是事務的處理會導致內存的占用增加的緣故吧。

            另外 在msdn 中 搜索 STGM ,注意紅色的字體,也就是收 使用com中的 IStorage 接口,是不能創建具有  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 閱讀(1254) 評論(0)  編輯 收藏 引用

            導航

            統計

            常用鏈接

            留言簿

            隨筆分類(23)

            隨筆檔案(26)

            文章分類(1)

            文章檔案(1)

            csdn

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品国产色蜜蜜麻豆| 久久久久一本毛久久久| 久久久国产99久久国产一| 中文字幕久久精品无码| 久久午夜电影网| 久久se精品一区二区影院| 久久久国产99久久国产一| 影音先锋女人AV鲁色资源网久久| 国产V综合V亚洲欧美久久| 日韩久久久久中文字幕人妻| 九九久久99综合一区二区| 97久久国产露脸精品国产| 精品免费久久久久久久| 超级97碰碰碰碰久久久久最新| 午夜不卡888久久| 一本伊大人香蕉久久网手机| 中文字幕精品无码久久久久久3D日动漫 | 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久精品成人欧美大片| 国产精品久久波多野结衣| 色88久久久久高潮综合影院| 中文成人久久久久影院免费观看| 久久精品国产秦先生| 久久精品一本到99热免费| 久久亚洲高清综合| 国产亚洲色婷婷久久99精品91| 亚洲国产一成人久久精品| 久久无码人妻一区二区三区午夜| 久久精品国产99久久久香蕉| 久久99精品国产一区二区三区| 伊人色综合久久天天人手人婷 | 国内精品久久久久久99蜜桃| 久久狠狠爱亚洲综合影院 | 人妻系列无码专区久久五月天| 99精品久久久久久久婷婷| 国产精品毛片久久久久久久| 久久婷婷色综合一区二区| 久久婷婷五月综合成人D啪 | 精品综合久久久久久888蜜芽| 欧美噜噜久久久XXX| 久久久久高潮毛片免费全部播放|