3

(Delphi XE2 アップデート 4)

すべての参照が解放されたときに、継承した大きな Microsoft Word OLE オートメーション ユニット (早期バインディング TWordApplicationWordXPと/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;

プロパティは、デバッガーで発生する $C0000005 エラーよりもEAccessViolationメッセージを読みやすくするためにあります。

_AddRefおよび_Release呼び出しを監視する一般的な方法について疑問に思っています (おそらく他の自動化プロジェクトでもこれが必要になるため) 。

私はこれらのリンクを見ました:

4

1 に答える 1