Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Winsock et passage de type

27 réponses
Avatar
Marc
Bonjour,

Est il possible, et comment, de passer un type avec winsock ?

du style


Public Type IndexAnnuaireCP
CP As String * 50
Adresse As String * 10
End Type


Public Annuaire As AnnuaireCP

passage:

Winsock1.SendData Annuaire

pour l'instant je ne trouve pas la solution.

Si cela est possible comment on la récupère à l'autre bout ?
et comment on appel dans ce cas Annuaire.CP ?

Par avance merci.

Marc

7 réponses

1 2 3
Avatar
Marc
En fait, une fonction recoit l'ordre d'écrire un rec dans un fichier avec
le handle.

Plutot que de faire un select case pour choisir le type est il possible de
passer le type directement ?

Marc

"jean-marc" a écrit dans le message de news:
4b13a62d$0$2870$
"Marc" wrote in message
news:
Re-Bonjour à tous,



Hello,

J'ai encore une question sur les type
peut on passer un type en argument à une fonction ?
Sachant que cette fonction peut recevoir plusieurs type
différents(différents enregistrements de taille différents)
Par avance merci



pas sur de comprendre la question. On peut passer
autant d'arguments que l'on veut à une fonction ?
La encore, simple question de design de l'application.


--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;








Avatar
jean-marc
"Marc" wrote in message
news:
En fait, une fonction recoit l'ordre d'écrire un rec dans un fichier avec
le handle.

Plutot que de faire un select case pour choisir le type est il possible de
passer le type directement ?



Mais le Select Case est fait sur quoi alors ? sur le type, non ?

peux tu donner ici le prototype de la fonction que tu utilises pour le
moment ? Ca sera sans doute plus clair.


--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;












Avatar
Marc
voici voila, au fait j'ai une autre question en plus la taille d'un
enregistrement est limité à combien en string ?

Public Function Addnew(ByVal HandleDat As Integer, ByVal HandleIdx As
Integer, ByVal NomRec As String) As String

On Error Resume Next

NumRec = 1
Err = 0
'Calcul Position
If LOF(HandleDat) < Val(FichierDat(HandleDat, 2)) Then
Position = 1
Else
Position = (LOF(HandleDat) / (Val(FichierDat(HandleDat, 2)) + 4)) +
1
End If

Select Case NomRec
Case "Pour"
Put HandleDat, Position, CSPour
End Select

'HandleIdx est utiliser pour ecrire l'index

If Err = 0 Then
Addnew = AStr(Position)
Else
Addnew = "-1"
End If
End Function


"jean-marc" a écrit dans le message de news:
4b13c860$0$2853$
"Marc" wrote in message
news:
En fait, une fonction recoit l'ordre d'écrire un rec dans un fichier
avec le handle.

Plutot que de faire un select case pour choisir le type est il possible
de passer le type directement ?



Mais le Select Case est fait sur quoi alors ? sur le type, non ?

peux tu donner ici le prototype de la fonction que tu utilises pour le
moment ? Ca sera sans doute plus clair.


--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
















Avatar
Jean-marc
Marc wrote:
voici voila, au fait j'ai une autre question en plus la taille d'un
enregistrement est limité à combien en string ?



Hmm, comme ça je ne sais pas. Au moins 32K. Sinon, faire des essais
est simple.

Public Function Addnew(ByVal HandleDat As Integer, ByVal HandleIdx As
Integer, ByVal NomRec As String) As String

On Error Resume Next

NumRec = 1
Err = 0
'Calcul Position
If LOF(HandleDat) < Val(FichierDat(HandleDat, 2)) Then
Position = 1
Else
Position = (LOF(HandleDat) / (Val(FichierDat(HandleDat, 2)) +
4)) + 1
End If

Select Case NomRec
Case "Pour"
Put HandleDat, Position, CSPour
End Select

'HandleIdx est utiliser pour ecrire l'index

If Err = 0 Then
Addnew = AStr(Position)
Else
Addnew = "-1"
End If
End Function




Je n'ai toujours rien compris :-(
Pourquoi ne passes tu pas CSPour en paramètre, avec le type en plus ??

---

(sinon, rien à voir, mais ta gestion des erreurs est très dangereuse:
ici, tu risques carrément d'écraser donc de corrompre ton
fichier de données!).

La bonne façon de faire :

Public Function MaFonction(ByVal param As Integer) As Long
Dim ValeurRetour As Long

On Error GoTo MaFonction_ERR

' traitement
' ValeurRetour = xxx

' ...

MaFonction = ValeurRetour

MaFonction_END:
Exit Function

MaFonction_ERR:
MaFonction = -1
Resume MaFonction_END
End Function




--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Marc
Merci Jean-Marc pour ton aide.

Hmm, comme ça je ne sais pas. Au moins 32K. Sinon, faire des essais
est simple.



A priori un enregistrement de 2065 caractères n'a pas l'air de passer ...

Je n'ai toujours rien compris :-(
Pourquoi ne passes tu pas CSPour en paramètre, avec le type en plus ??



En fait la fonction ecrit dans plusieurs fichiers differents d'ou le
handledat(fichier dat) et le handleidx (pour l'index).
Le type CSPour et un type d'enregistrement, mais en fait j'ai plusieurs type
d'enregistrements ayant dans mon logiciel plusieurs fichiers differents.

Je voudrais n'utiliser qu'une seule fonction pour ecrire dans les fichiers
d'ou ma question pour passer un type plutôt qu'un argument qui determinera
le type a écrire.


"Jean-marc" a écrit dans le message de news:
4b142049$0$2858$
Marc wrote:
voici voila, au fait j'ai une autre question en plus la taille d'un
enregistrement est limité à combien en string ?



Hmm, comme ça je ne sais pas. Au moins 32K. Sinon, faire des essais
est simple.

Public Function Addnew(ByVal HandleDat As Integer, ByVal HandleIdx As
Integer, ByVal NomRec As String) As String

On Error Resume Next

NumRec = 1
Err = 0
'Calcul Position
If LOF(HandleDat) < Val(FichierDat(HandleDat, 2)) Then
Position = 1
Else
Position = (LOF(HandleDat) / (Val(FichierDat(HandleDat, 2)) +
4)) + 1
End If

Select Case NomRec
Case "Pour"
Put HandleDat, Position, CSPour
End Select

'HandleIdx est utiliser pour ecrire l'index

If Err = 0 Then
Addnew = AStr(Position)
Else
Addnew = "-1"
End If
End Function




Je n'ai toujours rien compris :-(
Pourquoi ne passes tu pas CSPour en paramètre, avec le type en plus ??

---

(sinon, rien à voir, mais ta gestion des erreurs est très dangereuse:
ici, tu risques carrément d'écraser donc de corrompre ton
fichier de données!).

La bonne façon de faire :

Public Function MaFonction(ByVal param As Integer) As Long
Dim ValeurRetour As Long

On Error GoTo MaFonction_ERR

' traitement
' ValeurRetour = xxx

' ...

MaFonction = ValeurRetour

MaFonction_END:
Exit Function

MaFonction_ERR:
MaFonction = -1
Resume MaFonction_END
End Function




--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
jean-marc
"Marc" wrote in message
news:
Merci Jean-Marc pour ton aide.

Hmm, comme ça je ne sais pas. Au moins 32K. Sinon, faire des essais
est simple.



A priori un enregistrement de 2065 caractères n'a pas l'air de passer ...



J'ai vérifié, la limite est 64 Ko. Si tu as un problème, ce n'est pas à
cause de la taille de la chaine.

Ceci fonctionne par exemple:


Private Sub Form_Load()
Dim f As Integer
Dim szBuffer As String
Dim i As Long

Const REC_LEN As Long = 4096



f = FreeFile
Open "c:toto.txt" For Random Access Write As #f Len = REC_LEN + 2
For i = 1 To 10
szBuffer = String$(REC_LEN, Chr$(64 + i))
Put #f, , szBuffer
Next i

Close #f

End Sub


Je n'ai toujours rien compris :-(
Pourquoi ne passes tu pas CSPour en paramètre, avec le type en plus ??



En fait la fonction ecrit dans plusieurs fichiers differents d'ou le
handledat(fichier dat) et le handleidx (pour l'index).
Le type CSPour et un type d'enregistrement, mais en fait j'ai plusieurs
type d'enregistrements ayant dans mon logiciel plusieurs fichiers
differents.



ok. Problème de design donc, difficile de t'aider plus sans tout revoir.
Tel quel, pas d'autre choix que d'écrire des fonctions séparées ou une
fonction avec un gros select case.

Cordialement,

--
Jean-Marc
Avatar
Marc
Ok merci beaucoup pour tes infos Jean-Marc

"jean-marc" a écrit dans le message de news:
4b14f845$0$2854$
"Marc" wrote in message
news:
Merci Jean-Marc pour ton aide.

Hmm, comme ça je ne sais pas. Au moins 32K. Sinon, faire des essais
est simple.



A priori un enregistrement de 2065 caractères n'a pas l'air de passer ...



J'ai vérifié, la limite est 64 Ko. Si tu as un problème, ce n'est pas à
cause de la taille de la chaine.

Ceci fonctionne par exemple:


Private Sub Form_Load()
Dim f As Integer
Dim szBuffer As String
Dim i As Long

Const REC_LEN As Long = 4096



f = FreeFile
Open "c:toto.txt" For Random Access Write As #f Len = REC_LEN + 2
For i = 1 To 10
szBuffer = String$(REC_LEN, Chr$(64 + i))
Put #f, , szBuffer
Next i

Close #f

End Sub


Je n'ai toujours rien compris :-(
Pourquoi ne passes tu pas CSPour en paramètre, avec le type en plus ??



En fait la fonction ecrit dans plusieurs fichiers differents d'ou le
handledat(fichier dat) et le handleidx (pour l'index).
Le type CSPour et un type d'enregistrement, mais en fait j'ai plusieurs
type d'enregistrements ayant dans mon logiciel plusieurs fichiers
differents.



ok. Problème de design donc, difficile de t'aider plus sans tout revoir.
Tel quel, pas d'autre choix que d'écrire des fonctions séparées ou une
fonction avec un gros select case.

Cordialement,

--
Jean-Marc




1 2 3