COM遇到的奇怪问题

大狗狗 2017-12-13 11:22:12
这几天在研究Dsoframer,我想实现在CreateNew方法后动态加载文档而不重启office实例(dsoframer的Open方法相当于重启了一次程序)。
查看dsoframer源码,是通过QueryInterface查询IPersistStorage接口从流中加载文档数据。于是我在CreateNew以后,也获得到这个接口,然后Load文档流,但奇怪的是:接口获得到了,方法也没报错,但就是什么数据都没加载上去。。

IOleObject *m_pole;
//.....m_pole赋值
//....
IStorage * m_pstgfile = NULL;
IStorage * is = NULL;
IPersistStorage* pipstg = NULL;
pwszFile = L"C:\\ex.xls";

DWORD dwBindFlgs = (STGM_TRANSACTED | STGM_SHARE_DENY_WRITE | STGM_READWRITE);

if (SUCCEEDED(hr = StgOpenStorage(pwszFile, NULL, dwBindFlgs, NULL, 0, &is)))
{
hr = is->CopyTo(0, NULL, NULL, m_pstgfile);
if (SUCCEEDED(hr)){ m_pstgfile->Commit(STGC_OVERWRITE);}
}

if (SUCCEEDED(hr = m_pole->QueryInterface(IID_IPersistStorage, (void**)&pipstg)))
{
pipstg->Load(m_pstgfile);
pipstg->Release();
}


一计不成,我又生一计:
我看到源代码中在另存文档时使用了:
CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);
spDoc->SaveAs
我照猫画虎:
CComQIPtr<MSExcel::Workbooks> spBks(lDisp);
spBks->Open(file)
结果还是什么反应也没有,即不报错,也没任何效果。
我试了下spBks->Count,把该数值打印,结果正确,说明这个接口可以工作,为什么就不能Open呢???
...全文
164 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
大狗狗 2017-12-23
  • 打赏
  • 举报
回复
由于跨进程,所以该问题我找不到解决办法,只好设法绕开了。。
大狗狗 2017-12-14
  • 打赏
  • 举报
回复
感谢楼上回复:由于我其实是在C#程序中调用COM,所以没能显示出错误 信息,但其他朋友以前遇到过类似问题,错误信息是:“Open方法或属性因这篇文档在另一应用程序中而无效”http://bbs.csdn.net/topics/30097591 dsoframer是把word或excel界面嵌入到自己窗口中,这正是“文档在另一个应用程序中”,而我看了dsoframe源码,加载流的动作确实是在嵌入操作前进行的。现在似乎已找到问题所在了,接下来再想想解决办法。
zgl7903 2017-12-14
  • 打赏
  • 举报
回复
从 Import 的 代码来看 应该是 接口指针 lDisp 不一样吧

  _ApplicationPtr pXL;
  pXL.CreateInstance(L"Excel.Application");
     
  WorkbooksPtr pBooks = pXL->Workbooks;
  _WorkbookPtr pBook  = pBooks->Add((long)xlWorksheet);     
  _WorksheetPtr pSheet = pXL->ActiveSheet;

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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