首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

为啥在创建复合文档的时候,标志位里面必须指定一个SHARE属性

2013-08-01 
为什么在创建复合文档的时候,标志位里面必须指定一个SHARE属性?我只是要创建一个复合文档,如下的代码,运行

为什么在创建复合文档的时候,标志位里面必须指定一个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的值是什么,第三个参数置零

热点排行