我应该如何将char dbcc_name [1]转换为Delphi?

问题描述 投票:0回答:1

我在将以下C ++代码转换为Delphi时遇到问题。这是代码:

char dbcc_name[1]

这就是我认为应该的样子:

dbcc_name : array [0..0] of Char;

但是,我知道此字段应该返回一个名称,而不仅仅是一个字符。

所以,也许是这样的:

dbcc_name: array of Char;

现在,这看起来不错,但是无法预测名称的持续时间,它可能会返回一些带有红宝石和#0终止符的东西,但这是-我认为-不是合适的方式。使用指向此数组的指针是否明智?喜欢:

dbcc_name: PChar;

谢谢你。

delphi-xe7
1个回答
1
投票

您第一次是正确的,只是数据类型错误。改用AnsiChar,在C / C ++中为char

dbcc_name: array[0..0] of AnsiChar;

在Delphi 2009+中,CharWideChar的别名,在C / C ++中是Windows上的wchar_t,在其他平台上是char16_t

就是说,在C / C ++中,当一个1元素数组表示结构体的可变长度数据时是有意义的,它是结构体中的最后一个字段。在这种情况下,该结构通常存在于更大的已分配内存块中。在C / C ++中没有检查数组边界的方法,只要数组的内容不超过分配该数组的内存的边界,它的内容就可以超过该数组的边界。 [decays指向第一个元素的指针。在C语言中,很常见的是利用它来定义一个结构,该结构直接在其中嵌入了可变长度数据,可以按名称进行引用,而不必在内存中的其他位置分配数据。这在内存有限的嵌入式系统中特别有用。

Win32 API中有几种结构将这种方法用于可变长度数据。 Raymond Chen在他的博客中对此进行了更详细的讨论:

Why do some structures end with an array of size 1?

© www.soinside.com 2019 - 2024. All rights reserved.