我有一个指针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

解决方案 »

  1.   

    AS是类之间的转换,指针是不能AS的
      

  2.   

    MyFormPtr^表示指针的值
    tpIMyInterface是指针类型,所以无法转化
      

  3.   

    MyFormPtr^表示指针的值 意思是该指针指向的对象实例
      

  4.   

    这个问题看得头都昏了。
    在DELPHI里
    I开头的标识符一般表示接口。
    T开头的标识符一般代表类。
    P开头的标识符一般代表指针。晕。
      

  5.   

    让我还原一下你的类声明:type
      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里的类和接口就是指针,不需要再去声明指针了。
    理解了这个,第二个问题也应该可以解决了。
      

  6.   

    怎么判断ClassA实现了InterfaceA呢?
      

  7.   


    var
      IntfA: InterfaceA;
    begin
      if Supports(ClassA, InterfaceA, IntfA) then
        //ClassA实现了InterfaceA
    end;