大家都知道COM组件支等事件、方法、属性等。
但COM的很多参数类型和Delphi或其它语言的数据类型都不一样。
比如:delphi中的boolean 在COM中需要用VARIANT_BOOL(WordBool)代替。
      delphi中的string  在COM中需要用BSTR(widestring)代替。
      ....
现在有一个属性是TStringList类型的,请问在COM中的用什么参数表示?
数组(array)类型的呢?
如果可能的话,参数中可能需要传递一个Class类,怎么解决?
前提是,调用COM者不一定是delphi语言(如C#),请高手赐教?

解决方案 »

  1.   

    如果是复杂的东西,你可以定义一个接口
    例如IStringList,然后把TStringList的public方法全加到IStringList,然后用个类来实现IStringList
    而在属性中把这个IStringList接口返回就可以了
      

  2.   


          a:tstringlist;   
          o:olevariant;   
      var   
          i:integer;   
      begin   
          o:=vararraycreate([0,a.count-1],varvariant);   
          for   i:=0   to   a.count-1   do   
              o[i]:=a.strings[i];   
      end;这种方法是可以
    问题是属性如果用olevariant类型,那o[i]的下标值count如何知道是多少?
    就是说我如何知道olevariant变量放了多少个string字符串
      

  3.   

    var
      V: OleVariant;
      I: Integer;
    begin
      V := VarArrayCreate([0,9],varOleStr  );
      if VarIsArray(V) then
      //ShowMessage(IntToStr(VarArrayHighBound(V,1) - VarArrayLowBound(V,1) + 1));
      for I := VarArrayLowBound(V,1) to VarArrayHighBound(V,1) do
        begin
          V[I] := IntToStr(I);
        end;
    end;
      

  4.   

    for I := VarArrayLowBound(V,1) to VarArrayHighBound(V,1) do
    对对,就是需要这一句,我先写个试试,成功后立即结贴。