在C中,写PSecond sec就可以了。

解决方案 »

  1.   

    你这是发送网络数据?还是自己程序内部使用呢?
    看申明应该不是自己内部使用的吧。
    对CBC不熟,不明白这个DynamicArray怎么实现的。
    VC下倒真没见过直接能用的动态数组(也可能有)。一般都要自己实现个类。
    如果是往外传输的话,肯定要是固定长度的内容吧。起码标记数组的长度。
      

  2.   

    C/C++严格来说没有和Delphi的动态数组对应的数据结构.
    你的结构体在C/C++种无法对应.
    Delphi的动态数组实际上是一个结构体指针,负偏移中有引用计数和长度等信息.
    建议用这样的方式
    TFirst = packed record
      num:Integer;
      sec:PSecond;
    end;
    动态分配sec的个数
    或这样的方式
    TFirst = packed record
      num:Integer;
      sec:array[0..0] of TSecond;
    end;
    计算好长度动态GetMem出TFirst 来,然后通过数组的越界访问来访问sec
    C/C++那边才好对应.
      

  3.   

    谢谢各位,
    如 Miami_Dexter 所说,我查到的结论也是,动态数组是 Delphi 特有的东西。
    我将其作为参数,写了一个 DLL,供 VC 调用。
    但是,结果,大家可想而知。
    虽然,按 武稀松 所说的,我们可以(就算可以,没有继续研究下去)利用负偏移地址,得到实际长度。
    但是,这样的做法,我个人不是很喜欢。希望被遮掩的东西,就让它继续隐身吧。解决方法是……
    重新定义 Delphi 这边的参数。
    数组部分,使用类似 (const a:PInteger;const count:Integer) 这样的格式。
    获取内容大致如下:var
      p:PInteger;
    begin
      p := a;
      for i := 0 to count - 1 do
      begin
          // get one integer from p^
          Inc(p);
      end;
    end;谢谢大家。结贴给分。
      

  4.   

    补充一句:
    新参数如 DelphiGuy 所说。