4

非常に実験的で不安定な IDE アドインを作成しましたが、これは IDE のシャットダウン時に非常に厄介な A/V を引き起こします (最近のプロジェクトの機能が壊れます、grr!)。最終的に特定のデストラクタに絞り込みました。

destructor TMyAddIn.Destroy;
begin
  {$IFDEF DEBUG}
  { BUG is here, causes A/V at shutdown }
  (BorlandIDEServices as IOTAMessageServices).AddTitleMessage('Goodbye');
  {$ENDIF}

  { ... }
  { finalizing stuff }
  { ... }

   inherited;
end;

で A/V 例外が発生しましたread of address 0x00000008

問題のあるステートメントにさらに防御を追加しました。

  if Assigned(BorlandIDEServices) then    { passes }
    if Supports(BorlandIDEServices, IOTAMessageServices) then   { fails }
     (BorlandIDEServices as IOTAMessageServices).AddTitleMessage('Goodbye');

nil...そして、(1)ポインターがまだ機能していない(2)QueryInterfaceまだ機能している(3)目的のインターフェイスが存在しないことを理解しました。すべてが正常に見えることを考えると、フレンドリーであることを期待していますEIntfCastError。しかし、なぜ代わりに A/V を持っているのでしょうか?

4

1 に答える 1