我用VC做了一个COM,在VB中测试每一种方法都通过,现在用delphi调用,其他数据类型已经通了,但是现在不能调用数组类型不知道该怎么办头疼
有没有人有现成的例子?另外二维数组怎么调用?
请各位高手指点。。
我的信箱:[email protected]
如果解决问题,另送100分相谢

解决方案 »

  1.   

    VarArrayDimCount 
    VarArrayGet
    VarArrayHighBound
    具体使用看联机帮助
      

  2.   

    to:EastenChild(天高云淡) 
    我就是搞不定才请教大家的
    联机帮助我看了好多遍了,搞不定阿to:del_c_sharp(摩托~◎~◎~◎) 
    我不知道用什么,反正能用起来就可以了能否给我一个例子或者一段代码?
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    type
        DBTableInfo = record
            fieldname:string;
            fieldvalue:string;
        end;
    type
        DBTable = array[0..2] of DBTableInfo;type
        DBTable = array[0..2] of DBTableInfo;
    var
        test:IVariantArray;
        aaa:DBTable;
        bbb:DBTable;
        SendData,GettedData:OleVariant;
        msgString:string;
        i:integer;
        v:Variant;
        p:Pointer;
    begin
        test := CoVariantArray.Create;
        v := VarArrayCreate([0,sizeof(DBTable)],varByte);    aaa[0].fieldname := 'bookid';
        aaa[0].fieldvalue := '0';
        aaa[1].fieldname := 'bookname';
        aaa[1].fieldvalue := '射雕英雄传';
        aaa[2].fieldname := 'bookauthor';
        aaa[2].fieldvalue := '金庸';    p := VarArrayLock(v);
        Move(aaa,p^,sizeof(DBTable));
        VarArrayUnLock(v);    sendData := v;    test.GetArray(SendData,GettedData);
        v := GettedData;    p := VarArrayLock(v);
        Move(p^,bbb,sizeof(DBTable));
        VarArrayUnLock(v);
        
        msgString := '';
        for i := 0 to Size - 1 do
        begin
            msgString := '';
            msgString := bbb[i].fieldname + ' ' + bbb[i].fieldvalue;
            showmessage(msgString);
        end;
        test := nil;
    end;
    今天下午的一个测试用的代码,有点乱,粘到delphi中看得清楚些。
    服务器端的GetArray(SendData,GettedData);只不过把两个数据换了一下,没大用处。
      

  4.   

    糟,多删了一个size:integer.
    for循环里size = 3.
      

  5.   

    再转一篇简单的,未测试Server(COM/DCOM程序)端:     procedure TTestDCOM.Send4(Size: Integer; D1: OleVariant); 
        type 
             TData=array [0..999] of Byte; 
        Var 
             Data:TData; 
             i:Integer; 
        begin 
             for i:=0 to Size-1 do begin 
                  Data[i]:=D1[i]; 
             end; 
        end;   
      Cleint端:     Var 
            D1:OleVariant; 
        begin 
            D1:=VarArrayCreate([0,99],varByte);         { 
            D1[1]:=45; 
               ....  //将值存入D1中             } 
            S.Send4(99,D1);  //S是TestDCOM对象     end;
      

  6.   

    其实传递多维数组很简单!只需要按Delphi中个一多维数组赋值的方法。如:
    var
      RetVarArray,RowVarArray:OleVariant;
      i,j:integer;
    begin
      RetVarArray:=varArrayCreate([1,m],varVariant);
      RowVarArray:=varArrayCreate([1,n],varVariant);
      for i:=o to m-1 do
      begin
         for j:=0 to n-1 do
         beign
            RowVarArray[j]:=i*j;
         end; 
         RetVarArray[i]:=RowVarArray;
      end;
    道理上讲更简单,是因为Variant类型本身支持数组类型
    end;
      

  7.   

    另外还要说明的是按这种方式在VB中是无法按原来VB的格式去调用的,所以这时候最好再写一个VB的函数用来在两者之间转换