【问题标题】:How to pass a cstring from Delphi如何从 Delphi 传递一个 cstring
【发布时间】:2010-03-29 23:53:42
【问题描述】:

我正在用 Delphi 为一个服务器编写一个 tcp 客户端,它有一系列定义为 c 结构的消息。下面是其中一条消息的转换示例:

struct {
    int32     Reserved;
    cstring   Name;
    int32     flags;
}

msg1 = record
  Reserved : integer;
  Name : cstring???;
  flags : integer;
end

谷歌搜索类型告诉我 cstring 不同于我希望在这种情况下传递的标准 char 数组,但我似乎无法找出 cstring 的内部表示。

如何在记录中表示 cstring 以传递给服务器?

【问题讨论】:

  • 既然“cstring”显然是一个特定于规范的术语,你能说说你在说什么规范吗?
  • 规范用于 MongoDB 驱动程序

标签: delphi string tcpclient cstring


【解决方案1】:

该规范显然使用术语 cstring 来表示一个 char 数组,后跟一个空终止符,而不是实际的 CString 类型。显然,规范中的术语令人恼火。

【讨论】:

  • 好的。那么你的问题的答案是什么?什么是“规范”,它是如何定义该术语的? (在求助于外部资源之前,请务必查阅规范中的定义。)我们应该如何用 Delphi 术语解释该定义?
  • cstring 没有在规范中定义,因此我去寻找 CString 模板的二进制表示。在询问规范作者后,他们更新了规范以包含他们的定义。
【解决方案2】:

没有真正的区别。 “C 字符串”是指向以 null 结尾的字符数组的指针,仅此而已。 C 中没有像 Delphi 那样真正的“字符串类型”。 Delphi 用 PChar 类型表示它。 (注意,在 D2009 及以后,你必须知道 PAnsiChar 和 PWideChar 的区别。)

但请注意,如果文档将数组本身称为 C 字符串,而不是指向数组的指针,则可能存在缺陷。你必须在你的记录中使用一个数组,并且你必须知道它应该是多长时间。

【讨论】:

  • CString 也是一个 MS VC++ 类。我们在谈论哪个 CString?无论如何谷歌它,返回“有趣”的结果......
  • 由于规范中没有定义 CString,我认为它指的是 C++ 类。
猜你喜欢
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
相关资源
最近更新 更多