Wie ich in einem Kommentar zu Zam sagte, mit der aktuellen Version von Acrobat Reader DC, die ich heute heruntergeladen habe, bekomme ich genau den gleichen Fehler wie Sie.
Bitte versuchen Sie diesen Code und lassen Sie uns wissen, ob es den Fehler für Sie vermeidet, denn es funktioniert sicherlich für mich und es gibt kein AV, weder in der FormClose
noch danach.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ref : Integer;
begin
Ref := AcroPdf1.ControlInterface._AddRef;
AcroPdf1.Src := '';
AcroPdf1.Free;
AcroPdf1 := Nil;
end;
Das ist mein FormCreate, das meinen einzigen anderen Code enthält.
procedure TForm1.FormCreate(Sender: TObject);
begin
AFileName := 'd:\aaad7\pdf\printed.pdf';
AcroPdf1.src := AFileName;
AcroPdf1.setZoom(200); // <- this line is to exercise the
// ControlInterface to provoke the AV on shutdown
end;
Ich habe absolut keine Ahnung, warum mein FormClose
das AV-Problem vermeidet, und vor allen anderen so sagt, ja, es sieht für mich auch verrückt! Kaum etwas, das den Namen "Lösung" verdient, aber vielleicht schlägt es jemandem, der mehr über COM- und Ole-Steuerungen weiß als ich, eine angemessene Lösung vor.
ursprünglich enthielt ich die Ref := AcroPdf1._AddRef
nur als ein Experiment. Ich bemerkte, dass danach Ref
Wert 9 war. Nach AcroPdf1.Src := ''
, Aufruf AcroPdf1._Release
im Debugger-Evaluator zurückgegeben einen Wert von 4. Ich war im Begriff zu sehen, wenn das AV vermieden wurde, indem RefCount durch wiederholtes Aufrufen _Release
aber dann Presto !, es gab keine AV nach meiner ersten Spur in FormClose
beendet.
Update: ich folgende erschöpfend nicht getestet, aber diese vereinfachte FormClose
vermeidet auch das AV, auf meinem System auf jeden Fall:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ref : Integer;
begin
Ref := AcroPdf1.ControlInterface._AddRef;
end;
Offensichtlich zu Ref
die Zuordnung Weglassen nicht machen sollte jede Differenz.
Ich benutze Delphi 10 Seattle auf 64-Bit-Win10, BTW.
Es ist Jahre her, dass ich das TPDF-Objekt (Import von PDFLib_Tlb.Pas) verwendet habe und ich kann es nicht unter Win10 ausführen, aber haben Sie versucht, das FIntf-Mitglied der TPDF-Instanz auf Nil zu setzen, bevor Sie Ihr Formular schließen? Das wäre das erste, was ich versuchen würde. Übrigens ist FIntf trotz des Präfix "F" ein öffentliches Mitglied. – MartynA
ähnlich mit der modernen Version von Delphi (DX10 einschließlich). Ich verbrachte Stunden damit, eine Lösung zu finden, aber ohne Erfolg. Neuaufbau und Änderung der AdobeTlb-Datei hat nicht geholfen. Ich habe noch nicht versucht, Lösung von @MartynA :) bis jetzt mein Code für die Freigabe Adobe-Steuerelement in Versuch außer Block – Zam
@Zam, installierte ich die aktuelle Version von Reader DC und bekomme das gleiche Problem, so weit w/o Lösung. Das Active X hat kein öffentliches FIntf-Mitglied mehr, also machen Sie sich keine Gedanken über meinen Vorschlag. – MartynA