读书人

为啥在创建复合文档的时候标志位里面

发布时间: 2013-08-01 15:23:18 作者: rapoo

为什么在创建复合文档的时候,标志位里面必须指定一个SHARE属性?
我只是要创建一个复合文档,如下的代码,运行的时候就会有ASSERT错误:


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
IStorage* pStgOpen;
DWORD grfMode = STGM_WRITE | STGM_CREATE;
HRESULT ret=StgCreateDocfile(L"d:\\self\\Learn\\doc1.stg",grfMode,DWORD(),&pStgOpen);
ASSERT(SUCCEEDED(ret));
return 0;
}


我必须把grfMode改成
DWORD grfMode = STGM_WRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE;
然后就能成功的创建一个复合文档了:

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
IStorage* pStgOpen;
DWORD grfMode = STGM_WRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE;
HRESULT ret=StgCreateDocfile(L"d:\\self\\Learn\\doc1.stg",grfMode,DWORD(),&pStgOpen);
ASSERT(SUCCEEDED(ret));
return 0;
}

我的问题是: 为什么没有STGM_SHARE_EXCLUSIVE才可以呢?
我尝试发现STGM_SHARE_DENY_READ/STGM_SHARE_DENY_WRITE/STGM_SHARE_DENY_NONE都不能成功,只有EXCLUSIVE这个标识能成功。

MSDN上面似乎没有找到特别明确的解释啊。这是为什么呢?

[解决办法]
看看ret的值是什么,第三个参数置零

读书人网 >VC/MFC

热点推荐