下面是我写得一个delphi下使用接口的测试.开始一切正常,为了资源释放问题,我在 TMyTest 中增加了 _Release 方法,用以替掉原来的(因为它在引用为0时会释放对象),这样我可以在程序中显示的调用 .free释放. 但就是这个增加动作,导致无法编译。提示那信息如下: [Error] interfaceunit1.pas(20): Unsatisfied forward or external declaration: 'TMyTest._Release'
[Fatal Error] interfacetest.dpr(5): Could not compile used unit 'interfaceunit1.pas'这位可以帮忙分析一下。thanks.unit interfaceunit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
IGetName = interface
function GetClassName :string;
end; TMyTest = class(TInterfacedobject,IGetName)
private
classname :string;
protected
public
function GetClassName :string ; virtual;
function _Release : Integer; stdcall;
end; TForm1 = class(TForm,IGetName)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function GetClassName :string ; virtual;
end;var
Form1: TForm1;implementation{$R *.dfm}function TMyTest.GetClassName :string ;
begin
Result :='TMyTest2';
end;
function TMyTest_Release:integer;
begin
Result := -1;
end;function TForm1.GetClassName :string ;
begin
Result :='Foxxxxxrm2sfsdf';
end;procedure TForm1.Button2Click(Sender: TObject);
var
i : IGetName;
j :TMyTest;
begin
j :=TMyTest.Create;
i := j;
Label1.Caption :=i.GetClassName; i :=nil ;
// j.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i : IGetName;
begin
i := self;
Label1.Caption :=i.GetClassName;
end;end.
[Fatal Error] interfacetest.dpr(5): Could not compile used unit 'interfaceunit1.pas'这位可以帮忙分析一下。thanks.unit interfaceunit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
IGetName = interface
function GetClassName :string;
end; TMyTest = class(TInterfacedobject,IGetName)
private
classname :string;
protected
public
function GetClassName :string ; virtual;
function _Release : Integer; stdcall;
end; TForm1 = class(TForm,IGetName)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function GetClassName :string ; virtual;
end;var
Form1: TForm1;implementation{$R *.dfm}function TMyTest.GetClassName :string ;
begin
Result :='TMyTest2';
end;
function TMyTest_Release:integer;
begin
Result := -1;
end;function TForm1.GetClassName :string ;
begin
Result :='Foxxxxxrm2sfsdf';
end;procedure TForm1.Button2Click(Sender: TObject);
var
i : IGetName;
j :TMyTest;
begin
j :=TMyTest.Create;
i := j;
Label1.Caption :=i.GetClassName; i :=nil ;
// j.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i : IGetName;
begin
i := self;
Label1.Caption :=i.GetClassName;
end;end.
解决方案 »
- socket.sendbuff发送byte问题
- 对于新手的一个难题,希望大家帮忙解决,悬赏100分 !!
- 程序运行一段时间后自动退出。寻求原因
- 50分求?怎么获取操作系统里的输入法列表
- 一个串,长度为1到20,怎么判断该串由同一字符组成
- 各位仁兄帮忙解决,急!
- 突然发现自己还有1W多分.呵呵.散散分.来者有分.大家热闹一下(2)
- procedure ShowReportByGrid(Grid:TDBGrid;cap:string);,//(Grid:TDBGrid;cap:string);这东西定义来干什么的
- 请问如何让QRCompositeReport群组报表控件能控制换页??
- delphi在网页上上传成固定图片代码怎么写
- 如何为ClientDataset建立引索?(第N次提问)
- 急!控件数组问题!(现在给100分,求解阿)
begin
Result := -1;
end;
---
function TmyTest._release:integer;
最好使用delphi自动生成implement部分,ctrl+shift+c