关于网友提出的“ DLL中的无模式窗体问题”问题疑问,本网通过在网上对“ DLL中的无模式窗体问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: DLL中的无模式窗体问题描述:
我用的是Delphi7,在DLL中生成一无模式窗体,引出创建和关闭窗体的两个函数,代码如下
function CreateMyForm(AHandle:THandle):longint;
var
DLLForm: TMyForm;
begin
Application.Handle := AHandle;
DLLForm := TMyForm.Create(Application);
Result := Longint(DLLForm);
DLLForm.Show;
end;
procedure CloseMyForm(AFormRef: Longint);
begin
if AFormRef > 0 then
TMyForm(AFormRef).Release;
end;
然后在我的测试程序中使用这两个函数,代码如下:
unit frmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMainForm = class(TForm)
btnCreate: TButton;
btnClose: TButton;
procedure btnCreateClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
private
{ Private declarations }
FFormRef:TForm;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
function CreateMyForm(AHandle:THandle):Longint;stdcall;
external 'MyLib.dll';
procedure CloseMyForm(AFormRef: Longint);stdcall;
external 'MyLib.dll';
implementation
{$R *.dfm}
procedure TMainForm.btnCreateClick(Sender: TObject);
begin
if not Assigned(FFormRef) then
FFormRef := TForm(CreateMyForm(Application.Handle));
end;
procedure TMainForm.btnCloseClick(Sender: TObject);
begin
if Assigned(FFormRef) then
begin
CloseMyForm(Longint(FFormRef));
FFormRef := nil;
end;
end;
end.
现在问题是:
当我点击btnCreate按钮创建窗体,再点btnClose关闭窗体时,然后退出程序,一切正常
但当我点btnCreate按钮创建窗体,不关闭窗体直接退出程序时,就会出现错误提示:project DllTest.exe raised too many consecutive exceptions:'access violation at 0x002332d6:read of address 0x00d32850.'
即使我在MainForm.Destroy事件中加上关闭窗体的代码,也会出现同样的错误。
请问这是什么原因??应该怎样解决??谢谢