IPersistStorage保存到IStorage的有关问题
IPersistStorage保存到IStorage的问题
我用ATL做了一个Word的工具插件,想实现按了一个按钮之后能计算出当前文档的SHA-1值,我实现的思路是获取当前文档的Document对象,然后得到它的IPersistStorage接口,存到一个IStorage里面,最后从这个IStorage的IStream中获得二进制数据求SHA-1.可是我想把IPersistStorage保存到IStorage就出现错误了。程序如下:
上面的程序前面都返回S_OK,但是到了hr=OleSave那行就会返回E_OUTOFMEMORY
------解决方案--------------------
空间不够了?
------解决方案--------------------
http://read.pudn.com/downloads47/sourcecode/windows/file/157866/ex28b能保存能打开/ex28bView.cpp__.htm
搜索关于OleSave那一段看看
我用ATL做了一个Word的工具插件,想实现按了一个按钮之后能计算出当前文档的SHA-1值,我实现的思路是获取当前文档的Document对象,然后得到它的IPersistStorage接口,存到一个IStorage里面,最后从这个IStorage的IStream中获得二进制数据求SHA-1.可是我想把IPersistStorage保存到IStorage就出现错误了。程序如下:
STDMETHOD(ButtonClicked1)(IDispatch* ribbon)
{
const WCHAR bstrFileName[]=L"tempdata";
CString str;
CDocument0 doc;
doc=m_app.get_ActiveDocument();//m_app是之前已经获得的Application对象
IPersistStorage *a;
IStorage *b;
HRESULT hr;
STGOPTIONS sopts;
try{
hr=doc.m_lpDispatch->QueryInterface(IID_IPersistStorage,(LPVOID *)&a);
if(FAILED(hr))
return S_OK;
sopts.usVersion = 2;
sopts.reserved = 0;
sopts.ulSectorSize = 512;
sopts.pwcsTemplateFile = NULL;
hr = StgCreateStorageEx(bstrFileName,STGM_CREATE | STGM_TRANSACTED | STGM_READWRITE,STGFMT_DOCFILE, 0, &sopts, 0, IID_IStorage,(void**)&b);
if(FAILED(hr))
return S_OK;
hr=OleSave(a,b,FALSE);//该处返回E_OUTOFMEMORY
//hr=a->Save(b,FALSE);//使用该条语句也会返回E_OUTOFMEMORY
if(FAILED(hr))
return S_OK;
}catch(COleException *pExp){
hr=S_OK;
}catch(CMemoryException *pOOME){
hr=S_OK;
}catch(COleDispatchException *pODE){
hr=S_OK;
}
return S_OK;
}
上面的程序前面都返回S_OK,但是到了hr=OleSave那行就会返回E_OUTOFMEMORY
------解决方案--------------------
空间不够了?
------解决方案--------------------
http://read.pudn.com/downloads47/sourcecode/windows/file/157866/ex28b能保存能打开/ex28bView.cpp__.htm
搜索关于OleSave那一段看看