mcd*_*don 6 delphi acrobat activex
我的Delphi应用程序有一个使用Acrobat Reader ActiveX控件查看pdf的表单.当我使用控件的函数(LoadFile,gotoNextPage,gotoPreviousPage,gotoFirstPage,gotoLastPage),然后关闭表单时,我收到以下错误:"地址6AF5703C的访问冲突.读取地址6AF5703C".当我运行应用程序但不使用控件的功能,然后关闭表单时,应用程序将退出而不会出现错误.
有人知道这个问题的修复或解决方法吗?
我的应用程序是使用Delphi 5(遗留应用程序)编写的.我安装了Adobe Acrobat Reader DC v15.016.20045.
Mar*_*ynA 12
正如我在对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;
Run Code Online (Sandbox Code Playgroud)
这是我的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;
Run Code Online (Sandbox Code Playgroud)
我完全不知道为什么我会FormClose避免AV问题,而且在别人这么说之前,是的,它看起来也很生气!几乎没有什么值得称之为"解决方案",但也许它会为那些比我更了解COM和Ole控制的人提供一个合适的解决方案.
我最初把Ref := AcroPdf1._AddRef它作为一个实验包括在内.我注意到它之后,它Ref的值是9.之后AcroPdf1.Src := '',AcroPdf1._Release在调试器评估器中调用返回值4.我将通过反复调用_Release但是然后Presto 强制降低RefCount来避免AV ,有我第一次进入FormClose退出后没有AV .
更新:我没有详尽地测试以下内容,但这简化了FormClose也避免了AV,在我的系统上无论如何:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ref : Integer;
begin
Ref := AcroPdf1.ControlInterface._AddRef;
end;
Run Code Online (Sandbox Code Playgroud)
显然,省略任务不Ref应该有任何区别.
我在64位Win10上使用Delphi 10 Seattle,顺便说一下.