OVH Cloud OVH Cloud

Transfert structure via winsock

6 réponses
Avatar
Mathieu JAY
Bonjour, je suis en train de développer un petit jeux réseau. Je voudrais
transferer des structure de données via le winsock.
Dans ma structure y a plein de type différents boolean / byte / long .....
donc pour faire ca j'ai commencer par généré un string avec un copymemory de
ma structure ... mais hélas ... lorsque je recopie mon string sur ma
structure je perd des informations ... certaine valeur sont remplacé par un
code "?" soit le numéro 63 ...
quelqu'un peut m'expliquer ?

6 réponses

Avatar
Zoury
Salut Mathieu! :)

1. Peux-tu nous montrer ton code (seulement le bout de conversion de la
structure avec copymemory) ? ça semble être un problème d'encodage de texte
(du fait que tu passes par une chaine)
2. Je te recommanderais plutôt de copier ta strucutre dans un tableau de
Byte..

--
Cordialement
Yanick
MVP pour Visual Basic


"Mathieu JAY" a écrit dans le message de
news:41c2eb2d$0$11225$
Bonjour, je suis en train de développer un petit jeux réseau. Je voudrais
transferer des structure de données via le winsock.
Dans ma structure y a plein de type différents boolean / byte / long .....
donc pour faire ca j'ai commencer par généré un string avec un copymemory


de
ma structure ... mais hélas ... lorsque je recopie mon string sur ma
structure je perd des informations ... certaine valeur sont remplacé par


un
code "?" soit le numéro 63 ...
quelqu'un peut m'expliquer ?




Avatar
Zoury
> On peut transferer un tableau de byte avec un winsock ?



yep! :O)
Avatar
Zoury
reSalut!

passer une string pourrait fonctionner. c'est le manière d'appeler la
fonction copymemory qui cause le résultat que tu obtiens..

déclare CopyMemory comme suit :
'***
Declare Sub CopyMemory _
Lib "kernel32" _
Alias "RtlMoveMemory" _
( _
ByVal pDst As String,
ByRef pSrc As Long, _
ByVal ByteLen As Long _
)
'***

et utilise le comme ceci :
'***
Call CopyMemory(StringCOM, Comm, LenB(Comm))
'***

Ainsi, VB passe la version ANSI de la chaine à l'api copymemory et non la
version Unicode comme tu fesais (StrPtr() renvoit le pointeur de la version
Unicode d'une chaine). Regarde ce lien pour plus de détail :
http://www.mvps.org/vb/tips/varptr.htm


et regarde ce lien pour passer par un byte()
http://groups.google.com/groups?threadmëZR6o%23TEHA.3476%40tk2msftngp13.phx.gbl


--
Cordialement
Yanick
MVP pour Visual Basic

"Mathieu JAY" a écrit dans le message de
news:41c2f534$0$10229$
et voici le code ...

Public Type ControlJ
Action As Long
Select As Long
Haut As Long
Bas As Long
Gauche As Long
Droite As Long
End Type

Public Type COM_Joueur
Char(1 To 20) As Long
Ctrl As ControlJ
Enable As Long
Ready As Long
ID As Long
Score As Long
Skin As Long
PosX As Long
PosY As Long
VitX As Long
VitY As Long
Ang As Long
End Type

Public Type COM_Missille
IDJoueur As Long
Skin As Long
PosX As Long
PosY As Long
Ang As Long
End Type

Public Type COM_Decor
ID As Long
TypeColision As Long
Gravite As Long
Skin As Long
PosX As Long
PosY As Long
End Type

Public Type COM
Joueur(1 To 8) As COM_Joueur
Missille(1 To 80) As COM_Missille
Decor(1 To 100) As COM_Decor
End Type

Public Comm As COM

StringCOM = Space(Len(Comm))
CopyMemory ByVal StrPtr(StringCOM), Comm, LenB(Comm)




Avatar
Mathieu JAY
On peut transferer un tableau de byte avec un winsock ?


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Mathieu! :)

1. Peux-tu nous montrer ton code (seulement le bout de conversion de la
structure avec copymemory) ? ça semble être un problème d'encodage de


texte
(du fait que tu passes par une chaine)
2. Je te recommanderais plutôt de copier ta strucutre dans un tableau de
Byte..

--
Cordialement
Yanick
MVP pour Visual Basic


"Mathieu JAY" a écrit dans le message de
news:41c2eb2d$0$11225$
> Bonjour, je suis en train de développer un petit jeux réseau. Je


voudrais
> transferer des structure de données via le winsock.
> Dans ma structure y a plein de type différents boolean / byte / long


.....
> donc pour faire ca j'ai commencer par généré un string avec un


copymemory
de
> ma structure ... mais hélas ... lorsque je recopie mon string sur ma
> structure je perd des informations ... certaine valeur sont remplacé par
un
> code "?" soit le numéro 63 ...
> quelqu'un peut m'expliquer ?
>
>




Avatar
Mathieu JAY
et voici le code ...

Public Type ControlJ
Action As Long
Select As Long
Haut As Long
Bas As Long
Gauche As Long
Droite As Long
End Type

Public Type COM_Joueur
Char(1 To 20) As Long
Ctrl As ControlJ
Enable As Long
Ready As Long
ID As Long
Score As Long
Skin As Long
PosX As Long
PosY As Long
VitX As Long
VitY As Long
Ang As Long
End Type

Public Type COM_Missille
IDJoueur As Long
Skin As Long
PosX As Long
PosY As Long
Ang As Long
End Type

Public Type COM_Decor
ID As Long
TypeColision As Long
Gravite As Long
Skin As Long
PosX As Long
PosY As Long
End Type

Public Type COM
Joueur(1 To 8) As COM_Joueur
Missille(1 To 80) As COM_Missille
Decor(1 To 100) As COM_Decor
End Type

Public Comm As COM

StringCOM = Space(Len(Comm))
CopyMemory ByVal StrPtr(StringCOM), Comm, LenB(Comm)
Avatar
Mathieu JAY
j'essayeré et je tiens au courrant ....

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:%
> On peut transferer un tableau de byte avec un winsock ?

yep! :O)