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++那边才好对应.
谢谢各位, 如 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;谢谢大家。结贴给分。
看申明应该不是自己内部使用的吧。
对CBC不熟,不明白这个DynamicArray怎么实现的。
VC下倒真没见过直接能用的动态数组(也可能有)。一般都要自己实现个类。
如果是往外传输的话,肯定要是固定长度的内容吧。起码标记数组的长度。
你的结构体在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++那边才好对应.
如 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;谢谢大家。结贴给分。
新参数如 DelphiGuy 所说。