(德尔福 XE2 更新 4)
我正在尝试让我继承的一个大型 Microsoft Word OLE 自动化单元(基于早期绑定的 TWordApplication和WordXP
/Word2010
单元的接口)WINWORD.EXE
在所有引用都已发布时关闭。
到目前为止,看起来我确实发现了几个引用泄漏:大多数引用是属性或局部变量。
然而,一些使用场景仍然保持WINWORD.EXE
开放。
一些修复表明我应该更喜欢局部变量而不是链
procedure TOffice_10_XP_WordInterface.AddDocument;
var
WordApplicationDocuments: Documents;
begin
WordApplication_Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;
至
procedure TOffice_10_XP_WordInterface.AddDocument;
var
WordApplicationDocuments: Documents;
begin
WordApplicationDocuments := WordApplication_Documents;
WordApplicationDocuments.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;
基于调用此函数的 WordApplication_Documents 属性:
function TOffice_10_XP_WordInterface.GetWordApplication_Documents: Documents;
begin
Result := WordApplicationReference.Documents;
if not Assigned(Result) then
raise EAccessViolation.Create('Documents');
end;
这些属性使EAccessViolation消息比您在调试器中遇到的 $C0000005 错误更具可读性。
我想知道监视_AddRef和_Release调用的通用方法(因为我可能也需要它用于其他自动化项目)。
我确实看过这些链接:
- 理解和纠正 Delphi 的 Vcl.OleCtrls.pas 中的接口引用泄漏(它不适用,因为我不使用基于TOleControl的接口)
- 如何找到丢失的 _Release(这就是我现在使用的)
- 将对象实例直接作为 const 接口参数传递时,编译器是否应该提示/警告?(不适用:没有采用这些接口的 const 参数)
- 未使用的接口引用不会被破坏(在 Delphi XE 更新 1 及更高版本中已修复)
- 调用 Word.Documents.Add 后 WinWord.exe 不会退出 - Word .NET Interop
- COM 在 XE2 中是否损坏,我该如何解决?(在 Delphi XE2 更新 2 中修复)