_DSpaDB = dispinterface
    ['{058ADF51-1120-11D0-80D0-0000F73D691E}']
    property MapLayers: IDispatch dispid 1;
    property CompoundMaps: IDispatch dispid 2; _DCompoundMaps = dispinterface
    ['{8D431C80-44DA-11D1-BAC7-0000F73D6C85}']
    property Count: Integer dispid 1;
    property Names: IDispatch dispid 2;  _DStringArray = dispinterface
    ['{633349B2-27FC-11D0-8107-0000F73D691E}']
    property Count: Integer dispid 1;
    property value[index: Integer]: WideString dispid 14;C++ Builder中我找到可以用这种邦定的方式调用,
  _DCompoundMapsDisp CMaps;
  CMaps.Bind(_DSpaDB->CompoundMaps);
  _DStringArrayDisp CMapNames;
  CMapNames.Bind(CMaps.Names);在Delphi中好像无法这样做。有什么方法来实现类似的调用呢?

解决方案 »

  1.   

    用一个接口的属性来返回另一个接口?这也没什么问题啊,
    delphi中不能只声明接口的属性,不许加上至少一个read之类的方法,
    a = interface
    function getb:string;
    property b:string read getb;
    end;
      

  2.   

    水平太菜,还是不明白楼上的说明:(
    好像看到VB上面可以这样StringArray = DSpaDB.CompoundMaps.names;
    在Delphi中当然不能这样用,不明白怎么实现上面的过程,
    C++ Builder中那样做好像是给DSpaDB->CompoundMaps加上一个引用,
    但在Delphi中不知道该怎么办