2010-03-29 15 views
1

J'écris un client tcp dans Delphi pour un serveur qui a une série de messages définis comme c structs. Ci-dessous une conversion exemple de l'un des messages:Comment passer un cstring à partir de Delphi

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

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

recherche sur Google le type me dit qu'un cstring est différent de celui du tableau standard ombles je vous attendre à passer dans cette situation, mais je ne peux pas sembler trouver la représentation interne d'un cstring.

Comment est-ce que je représenterais cstring dans l'enregistrement pour le passage au serveur?

+0

Puisque "cstring" est évidemment un terme spécifique à la spécification, pouvez-vous s'il vous plaît mentionner de quelle spécification vous parlez? –

+0

La spécification concernait un pilote MongoDB –

Répondre

0

La spécification utilise apparemment le terme cstring pour désigner un tableau de char suivi d'un terminateur null au lieu d'un type CString réel. Apparemment juste une confusion irritante de la terminologie dans la spécification.

+0

OK. Alors, quelle est la réponse à votre question? Qu'est-ce que «la spécification» et comment définit-elle ce terme? (Toujours consulter la spécification pour les définitions avant de se tourner vers des sources extérieures.) Comment devrions-nous interpréter cette définition en termes Delphi? –

+0

cstring n'était pas défini dans la spécification et donc pourquoi je suis allé chercher la représentation binaire du modèle CString. Après avoir demandé aux auteurs de spécifications, ils ont mis à jour la spécification pour inclure leur définition. –

0

Il n'y a pas de réelle différence. Une "chaîne C" est un pointeur sur un tableau de caractères null-terminé, rien de plus. Il n'y a pas de vrai "type de chaîne" en C comme dans Delphi. Delphi le représente avec le type PChar. (Sachez que dans D2009 et plus tard, vous devez connaître la différence entre PAnsiChar et PWideChar.)

Attention, cependant, si la documentation appelle le tableau lui-même une chaîne C, par opposition à un pointeur vers la tableau, c'est un piège potentiel. Vous devrez utiliser un tableau dans votre dossier, et vous devrez savoir exactement combien de temps il est censé être.

+0

CString est également une classe MS VC++. De quel CString parlons-nous? Quoi qu'il en soit google pour cela, les résultats "intéressants" sont renvoyés ... –

+0

Comme CString n'était pas défini dans la spécification, j'ai supposé qu'il faisait référence à la classe C++. –