我只是要创建一个复合文档,如下的代码,运行的时候就会有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上面似乎没有找到特别明确的解释啊。这是为什么呢?