Zam'a yapılan bir yorumda söylediğim gibi, bugünkü Acrobat Reader DC'nin bugünkü sürümü indirildiyse, sizle aynı hatayı alıyorum.
Lütfen bu kodu deneyin ve hatadan kaçınmanızı isteyip istemediğinizi bize bildirin; çünkü kesinlikle benim için çalışıyor ve FormClose
ya da sonrasında AV yok.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ref : Integer;
begin
Ref := AcroPdf1.ControlInterface._AddRef;
AcroPdf1.Src := '';
AcroPdf1.Free;
AcroPdf1 := Nil;
end;
Bu, diğer tek kodumu içeren FormCreate'tir.
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;
benim FormClose
AV sorunu engeller niçin hiçbir fikrim yok ve herkesten öyle diyor önce, evet, o da bana deli görünüyor! “Çözüm” adını hak eden bir şey değil ama belki de COM ve Ole kontrolleri hakkında benden daha fazlasını bilen birine uygun bir çözüm önereceğim.
Orijinal olarak Ref := AcroPdf1._AddRef
'u bir deneme olarak ekledim. Bunu fark ettikten sonra, Ref
'un değeri 9'du. AcroPdf1.Src := ''
'dan sonra hata ayıklayıcı değerlendiricisinde AcroPdf1._Release
'u arayarak 4 değerini döndürdüm. Tekrar tekrar _Release
numaralı telefonu arayarak ancak ardından Presto'yu çağırarak AV'nin önlenip sakınmadığını görmek üzereydim. !, FormClose
'a ilk izlememden sonra AV çıkmadı.
Güncelleme
: Ref
için atama atlayarak yapmamalı,
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ref : Integer;
begin
Ref := AcroPdf1.ControlInterface._AddRef;
end;
Açıkçası: Ben etraflıca aşağıdaki fakat bu basitleştirilmiş FormClose
da herhangi bir oranda sistemimde, AV önler test etmedim herhangi bir fark.
64-bit Win10, btw'de Delphi 10 Seattle kullanıyorum.
TPDF nesnesini (PDFLib_Tlb.Pas dosyasını içe aktarma) kullandım ve Win10 altında çalışmaya başladığımdan beri, ancak formunuzu kapatmadan önce TPDF örneğinin FIntf üyesini Nil'e ayarlamayı denediniz mi? İlk denemem olurdu. Btw "F" öneki rağmen, FIntf bir kamu üyesidir. Delphi (DX10 dahil) modern versiyonu ile benzer – MartynA
. Çözümü bulmaya çalışırken saatlerimi harcadım, ama başarılı olamadım. AdobeTlb dosyasını yeniden oluşturmak ve değiştirmek işe yaramadı. Ben şimdiye kadar @MartynA çözüm denemedim :) bugüne kadar benim blok DC – Zam
@Zam denemede, Adobe kontrol denemek için kod, ben Okuyucu DC mevcut sürümü yüklü ve aynı sorun, şimdiye kadar w/o çözüm alıyorum. Active X'in artık bir Public FIntf üyesi yok, bu yüzden öneri ile uğraşma. – MartynA