我有一个指针IMyInterface,定义一个
tpIMyInterface = ^IMyInterface在程序里面我有一实现IMyInterface的类TMyObject,定义一个
tpMyObject = ^TMyObject,然后在某个过程do里面procedure do;
var
List : TList;
MyInterfacePtr : tpIMyInterface;
MyObjectPtr : tpMyObject;
begin
List := TList.Create;
MyObjectPtr^ := TMyObject.Create;
List.add(MyObjectPtr);
MyInterfacePtr := List.Items[0];
MyInterfacePtr^.doSomething//错误
end;请教为什么,如何把TLIST里面保存的指针传递给一接口指针!//////////////////////////////
此外另外一个问题,为什么我使用
tpTForm = ^TForm;
MyFormPtr : tpTForm;...(MyFormPtr^ as tpIMyInterface)//无法编译...
请教为什么,如何使用指针类型的AS
tpIMyInterface = ^IMyInterface在程序里面我有一实现IMyInterface的类TMyObject,定义一个
tpMyObject = ^TMyObject,然后在某个过程do里面procedure do;
var
List : TList;
MyInterfacePtr : tpIMyInterface;
MyObjectPtr : tpMyObject;
begin
List := TList.Create;
MyObjectPtr^ := TMyObject.Create;
List.add(MyObjectPtr);
MyInterfacePtr := List.Items[0];
MyInterfacePtr^.doSomething//错误
end;请教为什么,如何把TLIST里面保存的指针传递给一接口指针!//////////////////////////////
此外另外一个问题,为什么我使用
tpTForm = ^TForm;
MyFormPtr : tpTForm;...(MyFormPtr^ as tpIMyInterface)//无法编译...
请教为什么,如何使用指针类型的AS
tpIMyInterface是指针类型,所以无法转化
在DELPHI里
I开头的标识符一般表示接口。
T开头的标识符一般代表类。
P开头的标识符一般代表指针。晕。
tpIMyInterface = ^IMyInterface;
IMyInterface = interface
['{CA88C314-ECE7-46DD-869B-9CDBE0FC05DA}']
procedure doSomething;
end; tpMyObject = ^TMyObject;
TMyObject = class(TInterfacedObject, IMyInterface)
public
procedure doSomething;
end;{ TMyObject }
procedure TMyObject.doSomething;
begin
ShowMessage('hello world');
end;
正确的做法是这样的:var
List: TList;
MyInterface: IMyInterface;
MyObject: TMyObject;
begin
List := TList.Create;
MyObject := TMyObject.Create;
List.add(MyObject);
MyInterface := TMyObject(List.Items[0]) as IMyInterface;
MyInterface.doSomething;//正确
end;
你很可能是搞C++的,要记得Delphi里的类和接口就是指针,不需要再去声明指针了。
理解了这个,第二个问题也应该可以解决了。
var
IntfA: InterfaceA;
begin
if Supports(ClassA, InterfaceA, IntfA) then
//ClassA实现了InterfaceA
end;