http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-open-and-save-it-using-dsoframer.aspx
http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-open-and-save-it-using-dsoframer.aspx
————————————————————————————————————————————————————————
This is one of the interesting cases I had lately. My customer was using DSOFramer sample to host Office Documents, but whenever he tried to open and save Word 2007 documents in this manner, guess what !! the file seems to be deleted !
As I am basically a VB guy I did not want to bother myself with VC++ code of DSOFramer, because I've had easier ways to troubleshoot. The first thing I tried was Process Monitor from sysinternals. I could see that we are moving the file to a temp directory and then while saving it we are saving the changes in it. hmm..strange!
Then I checked DSOFramer code and I realized that IPersist:Save() is returning S_OK, it doesn't look like there is some issue whatsoever. Then moved to Word 2007 code, to me it looks like a bug in the implementation of IPersist:Save().
So ..to tackle this I had to modify the code of DSOFramer a bit, being more precise I modified the code of "CDsoDocObject::SaveStorageToFile" [this is in source file dsofdocobj.cpp]. Here is the modified code:
if (SUCCEEDED(hr = m_pole->QueryInterface(IID_IPersistFile, (void**)&pipfile)))
{
//Get the current open file
LPWSTR pwszCurPath = new WCHAR(MAX_PATH+1);
pipfile->GetCurFile(&pwszCurPath);
//Perform save.
hr = pipfile->Save(pwszFile, FALSE);
pipfile->Release();
//Save results S_OK, but the document is saved to the original location (IPersistFile->GetCurFile) in Word 2007.
//We will just check if that's the case and move the file.
if (SUCCEEDED(hr) && !FFileExists(pwszFile))
{
//We should come here only in case of Word 2007.
CopyFileW(pwszCurPath, pwszFile, TRUE);
}
}
Ok..bye for now.. will be back in a day with some more, and yes I am starting to do technorati and del.icio.us tagging
Asim Shah 20 Mar 2007 3:09 AMI've tried this change in my version of the DSOFramer and I get a compile time error as there is no variable available called pwsxCurPath.
I downloaded my source from the KB311765 link (same as the one you provide links to).
Did you get your source from somewhere else?
Asim Shah (asimshah@hotmail.com)
Hey..i am sorry ..there was a typo in my code..i corrected it
Jag 29 Mar 2007 2:42 AMCan someone please send to me the working dsoframer fixed to: jag_vb at. hotmail
thnks
Hello ..sir, nobody will send it to you. You 'll need to work on it! its a sample, provided as-is, and i am sorry there was a typo in my code, i corrected it- 1 Jan 2008 2:46 PM
According to MSDN, IPersistFile::GetCurFile allocates the string buffer for you so I think there's a memory leak in your code.
Here's what I believe to be correct (not yet tested though):
//Get the current open file
LPWSTR pwszCurPath = NULL;
if (S_OK != pipfile->GetCurFile(&pwszCurPath))
{
pwszCurPath = NULL;
}
//Perform save.
hr = pipfile->Save(pwszFile, FALSE);
pipfile->Release();
//Save results S_OK, but the document is saved to the original location (IPersistFile->GetCurFile) in Word 2007.
//We will just check if that's the case and move the file.
if (SUCCEEDED(hr) && !FFileExists(pwszFile) && pwszCurPath != NULL)
{
//We should come here only in case of Word 2007.
CopyFileW(pwszCurPath, pwszFile, TRUE);
}
if (pwszCurPath != NULL)
{
CoTaskMemFree(pwszCurPath);
pwszCurPath = NULL;
}
http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-open-and-save-it-using-dsoframer.aspx的更多相关文章
- POI 读取word (word 2003 和 word 2007)(转,好用)
POI 读取word (word 2003 和 word 2007)(转,好用) 转做的操作: 将作者文中失效的链接的正确链接放在失效链接的下面. 最近在给客户做系统的时候,用户提出需求,要能够导入 ...
- http://www.cnblogs.com/Lawson/archive/2012/09/03/2669122.html
http://www.cnblogs.com/Lawson/archive/2012/09/03/2669122.html
- Word 2007 文档结构图混乱
Word 2007在编写大型文档时经常出现文档结构图混乱的情况,经过多番检索试验,得出结论: 绝对有效的临时性解决方案:在打开word的时候左下角会有提示word自动更新文档样式,按esc键取消,然后 ...
- [转]彻底征服Word 2007标题多级列表
[转]彻底征服Word 2007标题多级列表 用Word编写文档的人都知道,一篇长文档一般是需要分章节来划分段落的.在Word中也有对应的工具来完成这项任务,这就是多级列表.然而绝大多数使用Micro ...
- Windows XP和Word 2007不能正常使用VSTO插件
今天帮助同事解决了一个小问题,就是在WindowsXP上,为Word2007开发的插件不能正常显示. 通过搜索关键词 WindowsXp Word 2007 VSTO找到了两个解决方案. http:/ ...
- POI 读取word (word 2003 和 word 2007) (转)
最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97.2003.2007的,这三个版本存储数据的格式上都有相当大的差别,而现在 9 ...
- http://www.cnblogs.com/Matrix54/archive/2012/05/03/2481260.html
http://www.cnblogs.com/Matrix54/archive/2012/05/03/2481260.html
- Embedding Documents in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Office
Download the sample code This visual how-to article presents a solution that creates a Word 2007 doc ...
- Word 2007 封面、目录和正文页码单独设置
word 2007 生成目录比较简单,即使不会,也可以百度,很快就能弄好.现在有如下需求: 1.封面去掉页码 2.目录页码从1开始,页码在页脚底部中间位置,格式为[1] 3.正文也从1开始,页码在页脚 ...
随机推荐
- HeadFirst Jsp 14 (Structs)
大的web程序可能很复杂, 分很多”层” 有关 RMI 的部分, 可以参考 headfirst java 中的 RMI 的部分. struts 是一个框架, 框架是一些接口和类的集合, 这些接口和类设 ...
- JQuery Highcharts图表控件多样式显示多组数据
具体实现的效果如图: 具体代码: ASP.NET前台脚本代码: <%@ Page Language="C#" AutoEventWireup="true" ...
- ionic中登陆逻辑控制
问题 登陆成功后从login.html调转到home.html,此时在home页面按back键又回到了login.html . 解决方案 登陆成功后,清除导航历史堆栈. 具体代码 menu.html ...
- Qt之QHeaderView自定义排序(QSortFilterProxyModel)
简述 对以上节的排序,我们衍伸了两点: 把一个字符串前面的数据按照字符串比较,而后面的数据按照整形比较. 将整形显示为字符串,而排序依然正常呢. 为了分别描述,这里我们先解决问题1. 简述 效果 处理 ...
- HDU 1851 (巴什博奕 SG定理) A Simple Game
这是由n个巴什博奕的游戏合成的组合游戏. 对于一个有m个石子,每次至多取l个的巴什博奕,这个状态的SG函数值为m % (l + 1). 然后根据SG定理,合成游戏的SG函数就是各个子游戏SG函数值的异 ...
- UVa 10048 Audiophobia【Floyd】
题意:给出一个c个点,s条边组成的无向图,求一点到另一点的路径上最大权值最小的路径,输出这个值 可以将这个 d[i][j]=min(d[i][j],d[i][k]+d[k][j]) 改成 d[i][j ...
- PHP几个几十个G大文件数据统计并且排序处理
诸多大互联网公司的面试都会有这么个问题,有个4G的文件,如何用只有1G内存的机器去计算文件中出现次数最多的数字(假设1行是1个数组,例如QQ号 码).如果这个文件只有4B或者几十兆,那么最简单的办法就 ...
- poj 1236 Network of Schools(强连通、缩点、出入度)
题意:给出一个有向图.1:问至少选出多少个点,才能沿有向边遍历所有节点.2:问至少加多少条有向边,使原图强连通. 分析:第一个问题,缩点后找所有树根(入度为0).第二个问题,分别找出入度为0和出度为0 ...
- (二)深入梯度下降(Gradient Descent)算法
一直以来都以为自己对一些算法已经理解了,直到最近才发现,梯度下降都理解的不好. 1 问题的引出 对于上篇中讲到的线性回归,先化一个为一个特征θ1,θ0为偏置项,最后列出的误差函数如下图所示: 手动求解 ...
- 【英语】Bingo口语笔记(22) - Talk系列
talk back 顶嘴 talk somebody in to something 劝某人做某事 tal somebody out of something 劝某人不做某事