题目有点说得不清除,具体说明:IMyInterfaceA = interface
  procedure ProcA;
end;IMyInterfaceB = interface
  procedure ProcB;
end;TMyInterfaceObj = class(TInterfacedObject, IMyInterfaceA, IMyInterfaceB)
  procedure ProcA;
  procedure ProcB;
end;function MyInterfaceAFactory: IMyInterfaceA;
begin
  Result := TMyInterfaceObj.Create;
end;var
  Obj : IMyInterfaceA; 
begin
  Obj := MyInterfaceFactory;
  // 现在我希望能够访问Obj的ProcB函数,该如何做,我把Obj强制转换为TMyInterfaceObj然后访问ProcB会出错,引发异常,而且是访问到别的函数里去了  
end;

解决方案 »

  1.   

    没人回自己解答
    刚看了帖子“请大家帮个忙,看有没有快速了解面向对象的编程思路的东东”
    http://search.csdn.net/Expert/topic/1608/1608117.xml?temp=.9106409知道了用AS可以进行接口间的安全转换。用AS解决了问题
      

  2.   

    你看看刘艺的《Delphi面向对象编程思想>>
      

  3.   

    但前提是:
    MyInterfaceFactory對象工廠它創造的對象必需是實現IMyInterfaceB的接口!!!
    否則, 還是會出錯!!!var
      Obj : IMyInterfaceA; 
    begin
      Obj := MyInterfaceFactory; //創造的對象必需是實現IMyInterfaceB的接口!!!
      

  4.   

    TO JonnySun():如果如果obj已经实现了IMyInterfaceB接口,则(obj as IMyInterfaceB).ProcB 的调用没有问题,但是如果obj没有实现IMyInterfaceB接口,则(obj as IMyInterfaceB) = nil
      

  5.   

    很容易啊就是查询接口。。任何COM中都支持的最基础功能。。
    在DELPHI中,就可以很简单的用AS运算符语法使用它。。var
      aintf : IMyInterfaceA; 
      bintf : IMyInterfaceB;
    begin
      aintf := MyInterfaceFactory;
      bintf := aintf as IMyInterfaceB;
     或者写成
     OleCheck(aintf.QueryInterface(IMyInterfaceB,bintf));  bintf.ProcB;
      

  6.   

    现在在释放MyInterfaceFactory的时候引发一个EAccessViolation异常,为什么会引发异常呢?
    释放的时候是调用Free来释放的。
      

  7.   

    不要调用FREE释放。它会自动释放的。
      

  8.   

    我发现使用接口要特别小心接口引用计数器,特别是在类型转换的过程中,比如把接口对象转为Pointer.谢谢各位。放分