我的Delphi应用程序具有使用Acrobat Reader ActiveX控件查看pdf的形式。当我使用控件的功能(LoadFile,gotoNextPage,gotoPreviousPage,gotoFirstPage,gotoLastPage),然后关闭表单时,出现以下错误:“地址6AF5703C的访问冲突。读取地址6AF5703C”。当我运行该应用程序但不使用控件的功能,然后关闭该窗体时,该应用程序将退出而不会出现错误。
有人知道此问题的修复程序或解决方法吗?
我的应用程序是使用Delphi 5(旧版应用程序)编写的。我已经安装了Adobe Acrobat Reader DC v15.016.20045。
最佳答案
正如我在对Zam的评论中所说的那样,今天下载了Acrobat Reader DC的当前版本,我得到与您完全相同的错误。
请尝试使用此代码,让我们知道它是否为您避免了错误,因为它肯定对我有用,并且在FormClose
或之后的版本中均没有AV。
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ref : Integer;
begin
Ref := AcroPdf1.ControlInterface._AddRef;
AcroPdf1.Src := '';
AcroPdf1.Free;
AcroPdf1 := Nil;
end;
这是我的FormCreate,其中包含我唯一的其他代码。
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;
我绝对不知道为什么我的
FormClose
避免了AV问题,之前别人这么说,是的,它看起来疯狂的给我,太!几乎没有什么值得称呼为“解决方案”的名称,但也许它将为那些比我更了解COM和Ole控件的人提供一个适当的解决方案。我最初只是作为实验添加了
Ref := AcroPdf1._AddRef
。我注意到,在此之后,Ref
的值为9。在AcroPdf1.Src := ''
之后,在调试器评估器中调用AcroPdf1._Release
返回值4。 !,在我对_Release
的第一次跟踪退出后,没有AV。更新:我没有详尽测试以下内容,但是这种简化的
FormClose
也可以避免在我的系统上出现AV,无论如何:procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ref : Integer;
begin
Ref := AcroPdf1.ControlInterface._AddRef;
end;
显然,省略对
FormClose
的分配不会有任何区别。我正在64位Win10上使用Delphi 10 Seattle,顺便说一句。
关于delphi - 关闭窗体时的Acrobat Reader ActiveX访问冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37885850/