在COM的接口方法中能不能用字符串数组,能的话在类型库参数中选择什么Type?不能的话有什么方法替代?如:procedure Tusd_ws.aa(aaa: array of WideString);

解决方案 »

  1.   

    用OleVariant类型
    VarArrayCreate建立数组
      

  2.   

    扩展一下 ysai(大海呀,真TM的大) 的意思就是procedure SomeProc(var AOle: OleVariant);
    begin
      {创建一个二维字符串数组,第一维从0..100,第二维从0..2}
      AOle:= VarArrayCreate([0, 100, 0, 2], varOleStr);  
      ……
    end;然后使用该接口后可以这样:procedure OtherProc;
    var
      NewOle: OleVariant;
      StrAry: array of array of string;
      i, j: Integer;
    begin
      SomeProc(NewOle);
       ……  
      for i:= 0 to 100 do
      begin
        for j:= 0 to 2 do
        begin
          StrAry[i, j]:= NewOle[i, j];
        end;
      end;
    end;
      

  3.   

    相关函数有:
    VarArrayCreate
    VarArrayHighBound
    VarArrayLowBound
    VarArrayDimCount
    VarArrayLock
    ……
      

  4.   

    Variant,Variant数组:
       Variant是一种可以拥有各种数据类型的变量.只要variant包含数字值就可以在variant上执行算法,或者当一个variant是字符串,另一个variant是个数值时,就有可能把两个variant加起来。使用VarArrayLowBound和VarArrayHighBound来计算variant数组的边界,以及VarArrayDimCount来计算数组的维数.
    VarArrayLock和VarArrayUnlock:
        Variant一般占据16位字节的内存,使用variant数组会导致性能损失,因此如果需要多次访问variant数组(如当在数组中循环时,可以使用VarArrayLock和VarArrayUnlock加速数组的访问。VarArrayCreate函数:创建一个变量数组,该方法是比较灵活的。function VarArrayCreate(const Bounds: array of Integer; VarType: TVarType): Variant;其中Bounds给定了数组的上下边界,VarType给定了数组中存储数据的类型。使用该函数时,必须在头文件中加入Variants单元的引用。如果想创建字符串的变量数组,那么使用varOleStr类型。例如:MyIntArray:=VarArrayCreate([1,10],varinteger);如果创建一个二维的数组,则代码如下:MyIntArray:=VarArrayCreate([1,10,1,5],varInteger);这声明了一个数组有10列和5行。
    Variant数组的一个最普遍的用途是创建一个variant类型的数组,就像下面这样:MyVarArray:=VarArrayCreate([1,10],varVariant);,这就创建了带有10个variant的数组。然后数组的单个元素就可以装载一个数组:MyVarArray[1]:=VarArrayCreae([1,5],varVariant);VarArrayOf:可在运行时用于创建一维variant数组,其内部创建variant数组,创建全异的数值数组如下:MyIntArray:=VarArrayOf([‘John’,’Smith’,40,6000.00,’Main Street’]);
      

  5.   

    忘了说,在类型库中选择OleVariant类型