佚名通过本文主要向大家介绍了
CreateStorage函数调用失败,返回的HRESULT是"无法执行请求的操作"等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: CreateStorage函数调用失败,返回的HRESULT是"无法执行请求的操作"
描述:
这个错误到底是如何产生的呢?我的代码要如何改?
解决方案1:
描述:
如题,我创建一个空的Ole文件,再在其中创建一个子存储。结果发现 CreateStorage返回0x80030001
#include "stdafx.h"
#include <shlwapi.h>
#pragma comment(lib,"shlwapi")
#include "Learn.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
CoInitialize(NULL);
IStorage* pStgRoot, *pStgSub;
HRESULT ret;
const OLECHAR fn[]=L"doc1.stg";
bool fCreateOleFile=true;
ret=StgIsStorageFile(fn);//delete none OLE file
if(ret==S_FALSE)
{
printf("delete existing file\n");
DeleteFile(fn);
}
else if(ret==S_OK)
{
fCreateOleFile=false;
}//else file not found
DWORD grfMode = STGM_CREATE | STGM_WRITE | STGM_TRANSACTED;
if(fCreateOleFile)
{
ret=StgCreateDocfile(fn,grfMode,0,&pStgRoot);
}
else
{
ret=StgOpenStorage(fn,NULL,grfMode,NULL,0,&pStgRoot);
printf("%x\n",ret);
}
ASSERT(SUCCEEDED(ret));
ret=pStgRoot->CreateStorage(L"SubStg",grfMode,0,0,&pStgSub);
printf("%x\n",ret);
ASSERT(SUCCEEDED(ret));
return 0;
}
这个错误到底是如何产生的呢?我的代码要如何改?
解决方案1:
返回值代表的内容是:
STG_E_INVALIDFUNCTION
The specified combination of flags in the grfMode parameter is not supported.
估计模式组合的参数不支持吧,把STGM_TRANSACTED去掉看。