奇怪的问题!?!??!如果在窗体上放上一个TXMLDocument控件的话,调用Button4Click,在FreeAndNil(m_RC)代码发生一个AV异常,其他两个按钮的相同事件不会发生异常(???);如果不放TXMLDocoment控件的话就不会出现异常;不知道原因所在,请各位大虾出手相助!以下是Unit的全部代码。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, StdCtrls, oxmldom, XMLDoc,
msxmldom;type
IFirstLay = interface
['{57B90895-4969-4AD5-B1BB-FAB4BD3FC0EB}']
function GetYourName : string;
end;type
ISecondLay = interface
['{6FB655A3-4805-402A-87C4-F9BD6BADAF05}']
function GetMyName : string;
end;type
IThirdLay = interface
['{6FB655A3-4805-402A-87C4-F9BD6BADAF05}']
function GetOtherName : string;
end;type
TRealClass = class(TComponent,ISecondLay,IThirdLay,IFirstLay)
public
function GetOtherName : string;
function GetYourName :string;
function GetMyName : string;
end;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Button3: TButton;
Button4: TButton;
Button5: TButton;
XMLDocument1: TXMLDocument; //问题出现行
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
{ TRealClass }function TRealClass.GetMyName: string;
begin
Result := 'AAA';
end;function TRealClass.GetOtherName: string;
begin
Result := 'CCC';
end;function TRealClass.GetYourName: string;
begin
Result := 'BBB';
end;procedure TForm1.Button3Click(Sender: TObject);
var
m_First : IThirdLay;
m_RC : TRealClass;
begin
m_RC := TRealClass.Create(nil);
m_First := IThirdLay(m_RC);
ShowMessage(m_First.GetOtherName);
FreeAndNil(m_RC);
end;procedure TForm1.Button4Click(Sender: TObject);
var
m_First : ISecondLay;
m_RC : TRealClass;
begin
m_RC := TRealClass.Create(nil);
m_First := ISecondLay(m_RC);
ShowMessage(m_First.GetMyName);
FreeAndNil(m_RC);
end;procedure TForm1.Button5Click(Sender: TObject);
var
m_First : IFirstLay;
m_RC : TRealClass;
begin
m_RC := TRealClass.Create(nil);
m_First := IFirstLay(m_RC);
ShowMessage(m_First.GetYourName);
FreeAndNil(m_RC);end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, StdCtrls, oxmldom, XMLDoc,
msxmldom;type
IFirstLay = interface
['{57B90895-4969-4AD5-B1BB-FAB4BD3FC0EB}']
function GetYourName : string;
end;type
ISecondLay = interface
['{6FB655A3-4805-402A-87C4-F9BD6BADAF05}']
function GetMyName : string;
end;type
IThirdLay = interface
['{6FB655A3-4805-402A-87C4-F9BD6BADAF05}']
function GetOtherName : string;
end;type
TRealClass = class(TComponent,ISecondLay,IThirdLay,IFirstLay)
public
function GetOtherName : string;
function GetYourName :string;
function GetMyName : string;
end;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Button3: TButton;
Button4: TButton;
Button5: TButton;
XMLDocument1: TXMLDocument; //问题出现行
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
{ TRealClass }function TRealClass.GetMyName: string;
begin
Result := 'AAA';
end;function TRealClass.GetOtherName: string;
begin
Result := 'CCC';
end;function TRealClass.GetYourName: string;
begin
Result := 'BBB';
end;procedure TForm1.Button3Click(Sender: TObject);
var
m_First : IThirdLay;
m_RC : TRealClass;
begin
m_RC := TRealClass.Create(nil);
m_First := IThirdLay(m_RC);
ShowMessage(m_First.GetOtherName);
FreeAndNil(m_RC);
end;procedure TForm1.Button4Click(Sender: TObject);
var
m_First : ISecondLay;
m_RC : TRealClass;
begin
m_RC := TRealClass.Create(nil);
m_First := ISecondLay(m_RC);
ShowMessage(m_First.GetMyName);
FreeAndNil(m_RC);
end;procedure TForm1.Button5Click(Sender: TObject);
var
m_First : IFirstLay;
m_RC : TRealClass;
begin
m_RC := TRealClass.Create(nil);
m_First := IFirstLay(m_RC);
ShowMessage(m_First.GetYourName);
FreeAndNil(m_RC);end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货