StgCreateDocfile失败,返回一个负数.为什么呢?

lkjerewq 2011-06-12 04:41:18

#include<stdio.h>
#include<objbase.h>
#pragma comment(lib,"ole32")
int main(void){
IStorage* pStg;
HRESULT ret=StgCreateDocfile(L"e:\\myfile",STGM_CREATE,0,&pStg);
printf("hr=%d\n",ret);
return 0;
}


输出hr=-2147286785

这是为什么呢
...全文
103 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkjerewq 2011-06-13
  • 打赏
  • 举报
回复
谢谢,但是我发现,必须加上STGM_SHARE_EXCLUSIVE标志位才可以创建成功,去掉这个标志位就还是返回空指针了。

为什么创建的时候需要STGM_SHARE_EXCLUSIVE这个标志位,好奇怪啊
kieirv 2011-06-13
  • 打赏
  • 举报
回复
要这样改,修改创建时的标志位STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE


#include "stdafx.h"
#include<stdio.h>
#include<objbase.h>
#pragma comment(lib,"ole32")
const OLECHAR fn[]=L"d:\\myfile";
int main(void){
IStorage* pStg;
HRESULT ret=StgCreateDocfile(fn,STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE,0,&pStg);
printf("hr=%ld,error=%d\n",ret,GetLastError());
if(pStg)pStg->Release();
VERIFY(S_OK==StgIsStorageFile(fn));
return 0;
}
kieirv 2011-06-13
  • 打赏
  • 举报
回复
我发现是pStg返回了空指针:

#include "stdafx.h"
#include<stdio.h>
#include<objbase.h>
#pragma comment(lib,"ole32")
int main(void){
IStorage* pStg;
HRESULT ret=StgCreateDocfile(L"d:\\myfile",STGM_CREATE,0,&pStg);
printf("hr=%ld,error=%d\n",ret,GetLastError());
if(pStg)pStg->Release();
return 0;
}


但是原因我也不知道。试了一下没有成功。
lkjerewq 2011-06-12
  • 打赏
  • 举报
回复
自己顶一下

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧