OVH Cloud OVH Cloud

Quelle différence ?

8 réponses
Avatar
Bismark Prods
Bonjour,

QQun pourrais me dire la différence entre LSet et l'api CopyMemory ?

Merci

8 réponses

Avatar
Ledev
"Bismark Prods" a écrit dans le message de
news:
Bonjour,

QQun pourrais me dire la différence entre LSet et l'api CopyMemory ?



lset permet d'alligné a gauche:
mavar=space(10)
lset mavar="coucou"

Aprés ce bout de code, mavar contiendra toujours 10 caractére, mais les 6
premiers seront "coucou" et les 4 autres n'auront pas changé(resterons des
espaces dans notres cas)

Tendi que l'API CopyMemory permet de copier le contenue d'une zone mémoire
vers une autres zone mémoire

a+
Avatar
Bismark Prods
errreur ! si j'ai un UDT contenant 2 fois 1 byte et une variable integer !
je peux faire un lset pour copier le contenu de l'un vers l'autre comme si
c'était un copymemory !

Et c'est pour ca que je veux savoir la différence !


"Ledev" a écrit dans le message de
news:

"Bismark Prods" a écrit dans le message de
news:
> Bonjour,
>
> QQun pourrais me dire la différence entre LSet et l'api CopyMemory ?

lset permet d'alligné a gauche:
mavar=space(10)
lset mavar="coucou"

Aprés ce bout de code, mavar contiendra toujours 10 caractére, mais les 6
premiers seront "coucou" et les 4 autres n'auront pas changé(resterons des
espaces dans notres cas)

Tendi que l'API CopyMemory permet de copier le contenue d'une zone mémoire
vers une autres zone mémoire

a+




Avatar
Bismark Prods
Cela n'est pas une réponse désolé ! J'ai besoin d'avoir des vérités et non
des suppositions


"Ledev" a écrit dans le message de
news:

"Bismark Prods" a écrit dans le message de
news:
> errreur ! si j'ai un UDT contenant 2 fois 1 byte et une variable integer


!
> je peux faire un lset pour copier le contenu de l'un vers l'autre comme


si
> c'était un copymemory !
>
> Et c'est pour ca que je veux savoir la différence !

Ah ba, falais le dire :-D

Bas il est parfaitement possible que sa revienent au même, sans aucune
différence(si ce n'est que l'API serra sans doute plus rapide)...

a+

>
>
> "Ledev" a écrit dans le message de
> news:
> >
> > "Bismark Prods" a écrit dans le message de
> > news:
> > > Bonjour,
> > >
> > > QQun pourrais me dire la différence entre LSet et l'api CopyMemory ?
> >
> > lset permet d'alligné a gauche:
> > mavar=space(10)
> > lset mavar="coucou"
> >
> > Aprés ce bout de code, mavar contiendra toujours 10 caractére, mais


les
6
> > premiers seront "coucou" et les 4 autres n'auront pas changé(resterons
des
> > espaces dans notres cas)
> >
> > Tendi que l'API CopyMemory permet de copier le contenue d'une zone
mémoire
> > vers une autres zone mémoire
> >
> > a+
> >
> >
>
>




Avatar
patrice henrio
L'important c'est de comprendre ce qu'est une variable dans un langage
informatique. ce n'est qu'une adresse mémoire de début et un nombre d'octet.
Par conséquent Lset Var1 = Var2 doit simplement recopier le contenu de Var1
(un certain nombre de bytes) et le srecopier au début de Var2, l'adresse
début et la longueur de Var2 restant inchangées. Par conséquent si Var1 et
Var2 ont la même longueur (au sens de len comme dans Open as random), il
s'agit simplement de copier les valeurs de l'un dans l'autre.

Exemple sur le code suivant
Private Type V
X1 As Byte
X2 As Byte
X3 As Byte
X4 As Byte
End Type

Private Type W
X As Integer
Y As Integer
End Type



Private Sub Form_Load()
Dim VAR1 As W, VAR2 As V
VAR1.X = 1
VAR1.Y = 256
LSet VAR2 = VAR1
End Sub

VAR1 vaut (1,256)

VAR2 vaut (1,0,0,1)


Supposons maintenant que V et W soit de longueur différent

Private Type V
X1 As Byte
X2 As Byte
X3 As Byte

End Type

Private Type W
X As Integer
Y As Integer
End Type



Private Sub Form_Load()
Dim VAR1 As W, VAR2 As V
VAR1.X = 1
VAR1.Y = 256
LSet VAR2 = VAR1
End Sub

Var1 vaut toujour (1,256)
Var2 vaut (1,0,0)


Option Explicit
Private Type V
X1 As Byte
X2 As Byte
X3 As Byte
X4 As Byte
X5 As Byte
End Type

Private Type W
X As Integer
Y As Integer
End Type



Private Sub Form_Load()
Dim VAR1 As W, VAR2 As V
VAR1.X = 1
VAR1.Y = 256
LSet VAR2 = VAR1
End Sub

Cette fois Var1 vaut (1,256)
et Var2 vaut (1,0,0,1,0)

Est-ce assez clair.

Lset ne fonctionne qu'avec des variables d'un type défini par l'utilisateur
(je ne parle pas bien sûr de
l'utilsation avec des chaînes).

Par contre CopyMemory comme son nom l'indique est une copie d'un certain
nombre d'octets en mémoire vers un autre emplacement, que cela représente
une variable ou non. Très pratique pour déplacer un dessin d'un endroit à
l'autre de l'écran. l'animation a commencé comme cela dans les années 80
avce du basic et 16KO de mémoire.


"Bismark Prods" a écrit dans le message de
news:
errreur ! si j'ai un UDT contenant 2 fois 1 byte et une variable integer !
je peux faire un lset pour copier le contenu de l'un vers l'autre comme si
c'était un copymemory !

Et c'est pour ca que je veux savoir la différence !


"Ledev" a écrit dans le message de
news:
>
> "Bismark Prods" a écrit dans le message de
> news:
> > Bonjour,
> >
> > QQun pourrais me dire la différence entre LSet et l'api CopyMemory ?
>
> lset permet d'alligné a gauche:
> mavar=space(10)
> lset mavar="coucou"
>
> Aprés ce bout de code, mavar contiendra toujours 10 caractére, mais les


6
> premiers seront "coucou" et les 4 autres n'auront pas changé(resterons


des
> espaces dans notres cas)
>
> Tendi que l'API CopyMemory permet de copier le contenue d'une zone


mémoire
> vers une autres zone mémoire
>
> a+
>
>




Avatar
Bismark Prods
oui enfin merci c'est pas vraiment ce que je demandais mais d'une manière
détournée j'ai un semblant de réponse.

Je pense que je vais finir par opté définitivement pour copymemory.

Dans un autre sujet,

Saviez vous que 0+1 = 1 mais que Null+1 = Null ?


"patrice henrio" a écrit dans le message de
news:%
L'important c'est de comprendre ce qu'est une variable dans un langage
informatique. ce n'est qu'une adresse mémoire de début et un nombre


d'octet.
Par conséquent Lset Var1 = Var2 doit simplement recopier le contenu de


Var1
(un certain nombre de bytes) et le srecopier au début de Var2, l'adresse
début et la longueur de Var2 restant inchangées. Par conséquent si Var1 et
Var2 ont la même longueur (au sens de len comme dans Open as random), il
s'agit simplement de copier les valeurs de l'un dans l'autre.

Exemple sur le code suivant
Private Type V
X1 As Byte
X2 As Byte
X3 As Byte
X4 As Byte
End Type

Private Type W
X As Integer
Y As Integer
End Type



Private Sub Form_Load()
Dim VAR1 As W, VAR2 As V
VAR1.X = 1
VAR1.Y = 256
LSet VAR2 = VAR1
End Sub

VAR1 vaut (1,256)

VAR2 vaut (1,0,0,1)


Supposons maintenant que V et W soit de longueur différent

Private Type V
X1 As Byte
X2 As Byte
X3 As Byte

End Type

Private Type W
X As Integer
Y As Integer
End Type



Private Sub Form_Load()
Dim VAR1 As W, VAR2 As V
VAR1.X = 1
VAR1.Y = 256
LSet VAR2 = VAR1
End Sub

Var1 vaut toujour (1,256)
Var2 vaut (1,0,0)


Option Explicit
Private Type V
X1 As Byte
X2 As Byte
X3 As Byte
X4 As Byte
X5 As Byte
End Type

Private Type W
X As Integer
Y As Integer
End Type



Private Sub Form_Load()
Dim VAR1 As W, VAR2 As V
VAR1.X = 1
VAR1.Y = 256
LSet VAR2 = VAR1
End Sub

Cette fois Var1 vaut (1,256)
et Var2 vaut (1,0,0,1,0)

Est-ce assez clair.

Lset ne fonctionne qu'avec des variables d'un type défini par


l'utilisateur
(je ne parle pas bien sûr de
l'utilsation avec des chaînes).

Par contre CopyMemory comme son nom l'indique est une copie d'un certain
nombre d'octets en mémoire vers un autre emplacement, que cela représente
une variable ou non. Très pratique pour déplacer un dessin d'un endroit à
l'autre de l'écran. l'animation a commencé comme cela dans les années 80
avce du basic et 16KO de mémoire.


"Bismark Prods" a écrit dans le message de
news:
> errreur ! si j'ai un UDT contenant 2 fois 1 byte et une variable integer


!
> je peux faire un lset pour copier le contenu de l'un vers l'autre comme


si
> c'était un copymemory !
>
> Et c'est pour ca que je veux savoir la différence !
>
>
> "Ledev" a écrit dans le message de
> news:
> >
> > "Bismark Prods" a écrit dans le message de
> > news:
> > > Bonjour,
> > >
> > > QQun pourrais me dire la différence entre LSet et l'api CopyMemory ?
> >
> > lset permet d'alligné a gauche:
> > mavar=space(10)
> > lset mavar="coucou"
> >
> > Aprés ce bout de code, mavar contiendra toujours 10 caractére, mais


les
6
> > premiers seront "coucou" et les 4 autres n'auront pas changé(resterons
des
> > espaces dans notres cas)
> >
> > Tendi que l'API CopyMemory permet de copier le contenue d'une zone
mémoire
> > vers une autres zone mémoire
> >
> > a+
> >
> >
>
>




Avatar
patrice henrio
C'est d'ailleurs ce qui est conseillé dans MDSN. "L'utilsation de Lset pour
copier une variable dans une autre est déconseillée car le résultat est
souvent aléatoire" (ou quelque chose dans ce genre là).


"Bismark Prods" a écrit dans le message de
news:e3Zvz%
oui enfin merci c'est pas vraiment ce que je demandais mais d'une manière
détournée j'ai un semblant de réponse.

Je pense que je vais finir par opté définitivement pour copymemory.

Dans un autre sujet,

Saviez vous que 0+1 = 1 mais que Null+1 = Null ?


"patrice henrio" a écrit dans le message de
news:%
> L'important c'est de comprendre ce qu'est une variable dans un langage
> informatique. ce n'est qu'une adresse mémoire de début et un nombre
d'octet.
> Par conséquent Lset Var1 = Var2 doit simplement recopier le contenu de
Var1
> (un certain nombre de bytes) et le srecopier au début de Var2, l'adresse
> début et la longueur de Var2 restant inchangées. Par conséquent si Var1


et
> Var2 ont la même longueur (au sens de len comme dans Open as random), il
> s'agit simplement de copier les valeurs de l'un dans l'autre.
>
> Exemple sur le code suivant
> Private Type V
> X1 As Byte
> X2 As Byte
> X3 As Byte
> X4 As Byte
> End Type
>
> Private Type W
> X As Integer
> Y As Integer
> End Type
>
>
>
> Private Sub Form_Load()
> Dim VAR1 As W, VAR2 As V
> VAR1.X = 1
> VAR1.Y = 256
> LSet VAR2 = VAR1
> End Sub
>
> VAR1 vaut (1,256)
>
> VAR2 vaut (1,0,0,1)
>
>
> Supposons maintenant que V et W soit de longueur différent
>
> Private Type V
> X1 As Byte
> X2 As Byte
> X3 As Byte
>
> End Type
>
> Private Type W
> X As Integer
> Y As Integer
> End Type
>
>
>
> Private Sub Form_Load()
> Dim VAR1 As W, VAR2 As V
> VAR1.X = 1
> VAR1.Y = 256
> LSet VAR2 = VAR1
> End Sub
>
> Var1 vaut toujour (1,256)
> Var2 vaut (1,0,0)
>
>
> Option Explicit
> Private Type V
> X1 As Byte
> X2 As Byte
> X3 As Byte
> X4 As Byte
> X5 As Byte
> End Type
>
> Private Type W
> X As Integer
> Y As Integer
> End Type
>
>
>
> Private Sub Form_Load()
> Dim VAR1 As W, VAR2 As V
> VAR1.X = 1
> VAR1.Y = 256
> LSet VAR2 = VAR1
> End Sub
>
> Cette fois Var1 vaut (1,256)
> et Var2 vaut (1,0,0,1,0)
>
> Est-ce assez clair.
>
> Lset ne fonctionne qu'avec des variables d'un type défini par
l'utilisateur
> (je ne parle pas bien sûr de
> l'utilsation avec des chaînes).
>
> Par contre CopyMemory comme son nom l'indique est une copie d'un certain
> nombre d'octets en mémoire vers un autre emplacement, que cela


représente
> une variable ou non. Très pratique pour déplacer un dessin d'un endroit


à
> l'autre de l'écran. l'animation a commencé comme cela dans les années 80
> avce du basic et 16KO de mémoire.
>
>
> "Bismark Prods" a écrit dans le message de
> news:
> > errreur ! si j'ai un UDT contenant 2 fois 1 byte et une variable


integer
!
> > je peux faire un lset pour copier le contenu de l'un vers l'autre


comme
si
> > c'était un copymemory !
> >
> > Et c'est pour ca que je veux savoir la différence !
> >
> >
> > "Ledev" a écrit dans le message de
> > news:
> > >
> > > "Bismark Prods" a écrit dans le message de
> > > news:
> > > > Bonjour,
> > > >
> > > > QQun pourrais me dire la différence entre LSet et l'api CopyMemory


?
> > >
> > > lset permet d'alligné a gauche:
> > > mavar=space(10)
> > > lset mavar="coucou"
> > >
> > > Aprés ce bout de code, mavar contiendra toujours 10 caractére, mais
les
> 6
> > > premiers seront "coucou" et les 4 autres n'auront pas


changé(resterons
> des
> > > espaces dans notres cas)
> > >
> > > Tendi que l'API CopyMemory permet de copier le contenue d'une zone
> mémoire
> > > vers une autres zone mémoire
> > >
> > > a+
> > >
> > >
> >
> >
>
>




Avatar
patrice henrio
result = expression1+expression2

L'une des deux expressions a la valeur Null

L'argument result a la valeur Null.



C'est une propriété de l'addition en VB.




"Bismark Prods" a écrit dans le message de
news:e3Zvz%
oui enfin merci c'est pas vraiment ce que je demandais mais d'une manière
détournée j'ai un semblant de réponse.

Je pense que je vais finir par opté définitivement pour copymemory.

Dans un autre sujet,

Saviez vous que 0+1 = 1 mais que Null+1 = Null ?


"patrice henrio" a écrit dans le message de
news:%
> L'important c'est de comprendre ce qu'est une variable dans un langage
> informatique. ce n'est qu'une adresse mémoire de début et un nombre
d'octet.
> Par conséquent Lset Var1 = Var2 doit simplement recopier le contenu de
Var1
> (un certain nombre de bytes) et le srecopier au début de Var2, l'adresse
> début et la longueur de Var2 restant inchangées. Par conséquent si Var1


et
> Var2 ont la même longueur (au sens de len comme dans Open as random), il
> s'agit simplement de copier les valeurs de l'un dans l'autre.
>
> Exemple sur le code suivant
> Private Type V
> X1 As Byte
> X2 As Byte
> X3 As Byte
> X4 As Byte
> End Type
>
> Private Type W
> X As Integer
> Y As Integer
> End Type
>
>
>
> Private Sub Form_Load()
> Dim VAR1 As W, VAR2 As V
> VAR1.X = 1
> VAR1.Y = 256
> LSet VAR2 = VAR1
> End Sub
>
> VAR1 vaut (1,256)
>
> VAR2 vaut (1,0,0,1)
>
>
> Supposons maintenant que V et W soit de longueur différent
>
> Private Type V
> X1 As Byte
> X2 As Byte
> X3 As Byte
>
> End Type
>
> Private Type W
> X As Integer
> Y As Integer
> End Type
>
>
>
> Private Sub Form_Load()
> Dim VAR1 As W, VAR2 As V
> VAR1.X = 1
> VAR1.Y = 256
> LSet VAR2 = VAR1
> End Sub
>
> Var1 vaut toujour (1,256)
> Var2 vaut (1,0,0)
>
>
> Option Explicit
> Private Type V
> X1 As Byte
> X2 As Byte
> X3 As Byte
> X4 As Byte
> X5 As Byte
> End Type
>
> Private Type W
> X As Integer
> Y As Integer
> End Type
>
>
>
> Private Sub Form_Load()
> Dim VAR1 As W, VAR2 As V
> VAR1.X = 1
> VAR1.Y = 256
> LSet VAR2 = VAR1
> End Sub
>
> Cette fois Var1 vaut (1,256)
> et Var2 vaut (1,0,0,1,0)
>
> Est-ce assez clair.
>
> Lset ne fonctionne qu'avec des variables d'un type défini par
l'utilisateur
> (je ne parle pas bien sûr de
> l'utilsation avec des chaînes).
>
> Par contre CopyMemory comme son nom l'indique est une copie d'un certain
> nombre d'octets en mémoire vers un autre emplacement, que cela


représente
> une variable ou non. Très pratique pour déplacer un dessin d'un endroit


à
> l'autre de l'écran. l'animation a commencé comme cela dans les années 80
> avce du basic et 16KO de mémoire.
>
>
> "Bismark Prods" a écrit dans le message de
> news:
> > errreur ! si j'ai un UDT contenant 2 fois 1 byte et une variable


integer
!
> > je peux faire un lset pour copier le contenu de l'un vers l'autre


comme
si
> > c'était un copymemory !
> >
> > Et c'est pour ca que je veux savoir la différence !
> >
> >
> > "Ledev" a écrit dans le message de
> > news:
> > >
> > > "Bismark Prods" a écrit dans le message de
> > > news:
> > > > Bonjour,
> > > >
> > > > QQun pourrais me dire la différence entre LSet et l'api CopyMemory


?
> > >
> > > lset permet d'alligné a gauche:
> > > mavar=space(10)
> > > lset mavar="coucou"
> > >
> > > Aprés ce bout de code, mavar contiendra toujours 10 caractére, mais
les
> 6
> > > premiers seront "coucou" et les 4 autres n'auront pas


changé(resterons
> des
> > > espaces dans notres cas)
> > >
> > > Tendi que l'API CopyMemory permet de copier le contenue d'une zone
> mémoire
> > > vers une autres zone mémoire
> > >
> > > a+
> > >
> > >
> >
> >
>
>




Avatar
Pierre Alexis
Salut Patrice,

Tu as écrit :

C'est d'ailleurs ce qui est conseillé dans MDSN. "L'utilsation de Lset pour
copier une variable dans une autre est déconseillée car le résultat est
souvent aléatoire" (ou quelque chose dans ce genre là).



Pas tout à fait. En fait il est marqué que LSet est à éviter lorsqu'on
travaille avec deux types utilisateurs différents :

"Warning Using LSet to copy a variable of one user-defined type into a
variable of a different user-defined type is not recommended. Copying data of
one data type into space reserved for a different data type can cause
unpredictable results."

--
Pierre ALEXIS - MVP Visual Basic
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/