本文介绍了VSTO Word插件中的文件锁(优先支持?)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 

我们有一个VSTO开发的Word-Addin for Word 2007的问题,在Visual Basic中使用VS2008 SP1创建,以及Delphi开发的工具,其中使用Word 2007编辑RTF格式的
文本作为编辑器。

问题是文件锁定,奇怪的是它只在我们的COM-Addin被激活时发生。

如果我们停用COM-Addin,没有错误,也没有文件锁定发生在另一个工具。

我知道这个问题中有很多信息,我试过make尽可能的可读性和可理解性。

即使这是一个与VSTO相关的论坛,我认为Delphi代码可以帮助理解VSTO COM-Addin中的问题。

首先描述Delphi开发的工具如何工作。

然后是对单词自动触发事件中发生的事情的描述。

最后有两个组件交互时的行为描述。

DELPHI-TOOL :

。-font-size:11pt"> OLE-container继承自标准Delphi OLE-komponent。文档,在我们的例子中是MS Word 2007.

编辑后,从OLE对象检索rtf格式的文本并通过流类存储到数据库中。



问题是我们收到一个错误,流类无法打开文件,因为它被另一个进程使用。



显示rtf时文本,从数据库中检索文本,以下代码在OLE容器中显示它。


 // - We need to save the RTF code in a temporary file
 tmpFilename2 := CreateTempFile; // Local function creating a temporary file with the extension ".DOC"

 // Use TFileStream instead of TStringList...(works better on large files)
 // write the rtf-text from database (ATextRtf) to stream.
 stream := TFileStream.Create(tmpFilename2, fmCreate or fmOpenWrite);
 try
 stream.Write(PChar(ATextRtf)^, Length(ATextRtf));
 finally
 stream.Free;
 end;

 // Create the OLE-object from the created file.
 fOleContainer.CreateOLEObjFromFile(tmpFilename2, False);

 // temporary files not needed anymore.
 DeleteFile(tmpFilename2);

推荐答案

我们遇到了VSTO开发的COM-Addin的问题Word 2007,使用VS2008 SP1在Visual Basic中创建,以及Delphi开发的工具,其中使用Word 2007
编辑RTF格式的文本作为编辑。

问题是文件锁定,奇怪的是它只会在我们的COM-Addin被激活时发生。

如果我们停用COM-Addin,则其他工具中不会出现错误且没有文件锁定。

我知道这个问题中有很多信息,我试过make是可读的和可理解的尽管这是一个与VSTO相关的论坛,但我认为Delphi代码可以帮助理解VSTO COM-Addin中的问题。

首先描述Delphi开发的工具如何工作。

然后是关于单词自动触发事件中发生的事情的描述。

最后有两个组件交互时的行为描述。

DELPHI-TOOL:

DELPHI-TOOL:

。-font-size:11pt"> OLE-container继承自标准Delphi OLE-komponent。文档,在我们的例子中是MS Word 2007.

编辑后,从OLE对象检索rtf格式的文本并通过流类存储到数据库中。



问题是我们收到一个错误,流类无法打开文件,因为它被另一个进程使用。



显示rtf时文本,从数据库中检索文本,以下代码在OLE容器中显示它。


 // - We need to save the RTF code in a temporary file

 tmpFilename2 := CreateTempFile; // Local function creating a temporary file with the extension ".DOC"



 // Use TFileStream instead of TStringList...(works better on large files)

 // write the rtf-text from database (ATextRtf) to stream.

 stream := TFileStream.Create(tmpFilename2, fmCreate or fmOpenWrite);

 try

 stream.Write(PChar(ATextRtf)^, Length(ATextRtf));

 finally

 stream.Free;

 end;



 // Create the OLE-object from the created file.

 fOleContainer.CreateOLEObjFromFile(tmpFilename2, False);



 // temporary files not needed anymore.

 DeleteFile(tmpFilename2);




这篇关于VSTO Word插件中的文件锁(优先支持?)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-31 07:02