Как передать cstring из Delphi - PullRequest
1 голос
/ 29 марта 2010

Я пишу tcp-клиент в Delphi для сервера, у которого есть серия сообщений, определенных как структуры c. Ниже приведен пример преобразования одного из сообщений:

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

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

Поиск типа в Google говорит мне, что cstring отличается от стандартного массива char, который я ожидал бы передать в этой ситуации, но я не могу найти внутреннее представление cstring.

Как бы я представлял cstring в записи для передачи на сервер?

Ответы [ 2 ]

0 голосов
/ 29 марта 2010

Нет реальной разницы. «Строка C» - это указатель на завершенный нулем массив символов, не более того. В Си нет настоящего «строкового типа», как в Delphi. Delphi представляет его типом PChar. (Помните, что в D2009 и более поздних версиях вы должны знать разницу между PAnsiChar и PWideChar.)

Осторожно, однако, если документация вызывает сам массив строку C, в отличие от указателя на массив, это потенциальная ловушка. Вам придется использовать массив в своей записи, и вам нужно будет точно знать, как долго он должен быть.

0 голосов
/ 29 марта 2010

Спецификация, очевидно, использует термин cstring для обозначения массива char, за которым следует нулевой терминатор вместо фактического типа CString. Видимо, просто раздражающее смешение терминологии в спецификации.

...