procedure TForm1.frxReport1BeforePrint(c: TfrxReportComponent);
var
  Cross: TfrxCrossView;
  i, j: Integer;
begin
  if c is TfrxCrossView then
  begin
    Cross := TfrxCrossView(c);
    for i := 1 to 16 do
      for j := 1 to 16 do
        Cross.AddValue([i], [j], [StringGrid1.Cells[i - 1, j - 1]]);  //主要是这句的转法
  end;
end;请大侠将上面的代码转成c++builder语法.搞不懂:
这是c++builder生成的hpp文件中的定义:
void __fastcall AddValue(const Variant *Rows, const int Rows_Size, const Variant *Columns, const int Columns_Size, const Variant *Cells, const int Cells_Size);这是delphi pas文件中的定义:
procedure AddValue(const Rows, Columns, Cells: array of Variant);谁能给解释下怎么回事

解决方案 »

  1.   

    应该是将cells的值赋给Cross的第rows行第columns列吧
      

  2.   

    看来表达有问题, 我是想问c++builder中hpp文件中的函数参数为什么会增加了一倍
    还有是将这句转写成c++builder语法
    Cross.AddValue([i], [j], [StringGrid1.Cells[i - 1, j - 1]]);
      

  3.   

    首先这个函数意图上需要的参数其实是3个数组
    delphi中传递的是数组类型,注意数组本身是delphi一种类型,传递数组过去后delphi当然是有办法知道数组长度的
    c++builder数组其实是原始类型(就是连续的内存空间了),只能通过传递数组首地址(数组第一个元素的地址)以及数组长度的方式传递数组,光是通过一个指针是无法确定数组长度的所以
    Cross.AddValue([i], [j], [StringGrid1.Cells[i - 1, j - 1]]); 
    翻译过来 可能像这样
    Cross.AddValue(—i, 1,—j,1, —StringGrid1.Cells[i - 1, j - 1],1);
      

  4.   

    谢谢楼上 ikumei(雷欧钠德) 老大