2010-03-29 2 views
1

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

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

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

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

Как я могу представить cstring в записи для перехода на сервер?

+0

Поскольку «cstring», по-видимому, является особым термином, можете ли вы указать, о какой спецификации вы говорите? –

+0

Спецификация была для драйвера MongoDB –

ответ

0

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

+0

OK. Итак, каков ответ на ваш вопрос? Что такое «спецификация» и как он определяет этот термин? (Всегда обращайтесь к спецификации для определений, прежде чем обращаться к внешним источникам.) Как мы должны интерпретировать это определение в терминах Delphi? –

+0

cstring не был определен в спецификации, и поэтому я пошел искать двоичное представление шаблона CString. После того, как они спросили авторов спецификации, они обновили спецификацию, чтобы включить их определение. –

0

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

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

+0

CString также является классом MS VC++. О какой CString мы говорим? В любом случае google для этого, «интересные» результаты возвращаются ... – 2010-03-29 18:59:19

+0

Поскольку CString не была определена в спецификации, я предположил, что это относится к классу C++. –