Bonjour
Je coince pour l instant sur la lecture d un array de 20 bytes ( en fait 5
mots de 4 bytes)
comme me le Vincent Guichard proposait.
Public Type TestBytes
m_0(1 To 20) As Byte
End Type
Public tbStatus as testBytes
1)
' le code suivant fonctionne mais trop d'appel a faire pour extraire
tout le contenu de la structure
' et il est connu qu il y a bug dans Win95/98 ( bug réparé dans XP et 2000)
mais je tourne sous Win98
2)
' le code suivant ne fonctionne pas , rien que des zéros
Me.Winsock1.GetData tbStatus.m_0, vbArray + vbByte, 20 ' lecture
en array de 20 bytes
For i = 1 To 20
Memo.Text = Memo.Text & i & vbTab & Hex(tbStatus.m_0(i)) & vbCrLf
Next i
LSet ServerStatus = tbStatus ' passage de l array
vers la structure
j'ai aussi l'erreur de compilation suivante sur le ligne
Me.winsockk1.getdata...........
:
'Only user-defined type defined in public object modules can be coerced to
or from a variant........'
> ensuite, il faut une boucle pour coller ca dans ta structure tbStatus for i = 0 to 19 tbStatus.m0(i)=tabl(i) next i suivit du LSet
Pourquoi utiliser LSet si tu as déjà copié les éléments un à un? Personnellement je trouve la méthode du CopyMemory beaucoup plus directe, flexible et lisible...
J'ai fait un projet de test que je met en PJ. (Ca passe au moin les pj?)
Yep.. seulement lorsque tu postes avec pièce jointe, ton message n'est pas archivé dans Google, ce qui rend souvent les archives incomplète. Alors le mieux est de posté une réponse et de posté le projet en réponse à cette réponse. ;O)
> ensuite, il faut une boucle pour coller ca dans ta structure tbStatus
for i = 0 to 19
tbStatus.m0(i)=tabl(i)
next i
suivit du LSet
Pourquoi utiliser LSet si tu as déjà copié les éléments un à un?
Personnellement je trouve la méthode du CopyMemory beaucoup plus directe,
flexible et lisible...
J'ai fait un projet de test que je met en PJ. (Ca passe au moin les pj?)
Yep.. seulement lorsque tu postes avec pièce jointe, ton message n'est pas
archivé dans Google, ce qui rend souvent les archives incomplète. Alors le
mieux est de posté une réponse et de posté le projet en réponse à cette
réponse. ;O)
> ensuite, il faut une boucle pour coller ca dans ta structure tbStatus for i = 0 to 19 tbStatus.m0(i)=tabl(i) next i suivit du LSet
Pourquoi utiliser LSet si tu as déjà copié les éléments un à un? Personnellement je trouve la méthode du CopyMemory beaucoup plus directe, flexible et lisible...
J'ai fait un projet de test que je met en PJ. (Ca passe au moin les pj?)
Yep.. seulement lorsque tu postes avec pièce jointe, ton message n'est pas archivé dans Google, ce qui rend souvent les archives incomplète. Alors le mieux est de posté une réponse et de posté le projet en réponse à cette réponse. ;O)
ensuite, il faut une boucle pour coller ca dans ta structure tbStatus for i = 0 to 19 tbStatus.m0(i)=tabl(i) next i suivit du LSet
Pourquoi utiliser LSet si tu as déjà copié les éléments un à un?
Pour assurer la conversion byte() -> long
Personnellement je trouve la méthode du CopyMemory beaucoup plus directe, flexible et lisible...
Possible, oui. En fait, quand j'ai proposé ma solution, il ne m'était pas venu à l'idée que GetData n'acceptait que les tableaux dynamiques en sortie.
J'ai fait un projet de test que je met en PJ. (Ca passe au moin les pj?)
Yep.. seulement lorsque tu postes avec pièce jointe, ton message n'est pas archivé dans Google, ce qui rend souvent les archives incomplète. Alors le mieux est de posté une réponse et de posté le projet en réponse à cette réponse. ;O)
OK, je retiens le conseil.
Vincent Guichard
Zoury a écrit :
ensuite, il faut une boucle pour coller ca dans ta structure tbStatus
for i = 0 to 19
tbStatus.m0(i)=tabl(i)
next i
suivit du LSet
Pourquoi utiliser LSet si tu as déjà copié les éléments un à un?
Pour assurer la conversion byte() -> long
Personnellement je trouve la méthode du CopyMemory beaucoup plus directe,
flexible et lisible...
Possible, oui. En fait, quand j'ai proposé ma solution, il ne m'était
pas venu à l'idée que GetData n'acceptait que les tableaux dynamiques en
sortie.
J'ai fait un projet de test que je met en PJ. (Ca passe au moin les pj?)
Yep.. seulement lorsque tu postes avec pièce jointe, ton message n'est pas
archivé dans Google, ce qui rend souvent les archives incomplète. Alors le
mieux est de posté une réponse et de posté le projet en réponse à cette
réponse. ;O)
ensuite, il faut une boucle pour coller ca dans ta structure tbStatus for i = 0 to 19 tbStatus.m0(i)=tabl(i) next i suivit du LSet
Pourquoi utiliser LSet si tu as déjà copié les éléments un à un?
Pour assurer la conversion byte() -> long
Personnellement je trouve la méthode du CopyMemory beaucoup plus directe, flexible et lisible...
Possible, oui. En fait, quand j'ai proposé ma solution, il ne m'était pas venu à l'idée que GetData n'acceptait que les tableaux dynamiques en sortie.
J'ai fait un projet de test que je met en PJ. (Ca passe au moin les pj?)
Yep.. seulement lorsque tu postes avec pièce jointe, ton message n'est pas archivé dans Google, ce qui rend souvent les archives incomplète. Alors le mieux est de posté une réponse et de posté le projet en réponse à cette réponse. ;O)
OK, je retiens le conseil.
Vincent Guichard
jose MULLER
merci a tous cela fonctionne.
j'ai retrouvé une reponse de microsoft dans le HOWTO
ID: Q152058 Send and receive UDT's Using the Winsock control
Voici la partie de code
'------------------------------------------------------- Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbcopy As Long)
'------------------------------------------------------- Public Type TCServerStatus m_ErrorCode As Long m_Info1 As Long m_Info2 As Long m_Status As Long m_Length As Long End Type
Public ServerStatus As TCServerStatus '--- Public Type TCUserSetupData m_LowThreshold As Long 'Single m_HighThreshold As Long 'Single m_LowLowThreshold As Long 'Single m_HighHighThreshold As Long 'Single m_MinDefectArea As Long 'Single End Type Public UserSetupData As TCUserSetupData
' structure UserSetupdata en format byte Public Type TestBytesUser m_0(1 To 20) As Byte End Type
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '--------------------------------------------------------- Dim i As Integer Dim bt() As Byte Dim vta
j'ai retrouvé une reponse de microsoft dans le HOWTO
ID: Q152058 Send and receive UDT's Using the Winsock control
Voici la partie de code
'-------------------------------------------------------
Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory"
(hpvDest As Any, hpvSource As Any, ByVal cbcopy As Long)
'-------------------------------------------------------
Public Type TCServerStatus
m_ErrorCode As Long
m_Info1 As Long
m_Info2 As Long
m_Status As Long
m_Length As Long
End Type
Public ServerStatus As TCServerStatus
'---
Public Type TCUserSetupData
m_LowThreshold As Long 'Single
m_HighThreshold As Long 'Single
m_LowLowThreshold As Long 'Single
m_HighHighThreshold As Long 'Single
m_MinDefectArea As Long 'Single
End Type
Public UserSetupData As TCUserSetupData
' structure UserSetupdata en format byte
Public Type TestBytesUser
m_0(1 To 20) As Byte
End Type
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'---------------------------------------------------------
Dim i As Integer
Dim bt() As Byte
Dim vta
j'ai retrouvé une reponse de microsoft dans le HOWTO
ID: Q152058 Send and receive UDT's Using the Winsock control
Voici la partie de code
'------------------------------------------------------- Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbcopy As Long)
'------------------------------------------------------- Public Type TCServerStatus m_ErrorCode As Long m_Info1 As Long m_Info2 As Long m_Status As Long m_Length As Long End Type
Public ServerStatus As TCServerStatus '--- Public Type TCUserSetupData m_LowThreshold As Long 'Single m_HighThreshold As Long 'Single m_LowLowThreshold As Long 'Single m_HighHighThreshold As Long 'Single m_MinDefectArea As Long 'Single End Type Public UserSetupData As TCUserSetupData
' structure UserSetupdata en format byte Public Type TestBytesUser m_0(1 To 20) As Byte End Type
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '--------------------------------------------------------- Dim i As Integer Dim bt() As Byte Dim vta