Dans le cadre de l'utilisation d'une API qui écrit dans une variable
passée j'ai une erreur de tentative d'écriture sur une mémoire protogée.
Exemple
Declare Function MoveToEx Lib "gdi32" (ByVaL hdc As Integer, ByVaL x As
Integer, ByVaL y As Integer, lpPoint As POINTAPI) As Integer
Dim ap(0) as pointapi
Movetoex( mhdc, ap(0).x,ap(0).y,ap(0)) ' erreur sur cette ligne
La solution qui marche c'est de déclarer une seconde variable ap1(0) et
d'écrire :
Movetoex( mhdc, ap(0).x,ap(0).y,ap1(0))
Mais cela ne me convient pas, je souhaite utiliser la variable Ap(0),
comment faire ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jérémy Jeanson
Bonjour ChC2B,
En fait ton souci viens de la ré-écriture que tu as fais de MoveToEx. Si tu regarde dan la MSDN le dernier argument est un pointeur qui sert d. http://msdn.microsoft.com/en-us/library/aa932127.aspx
Etant donnée qu'un pointeur ne peut être en même temps en entrée et en sortie sur la même méthode, si tu veux utiliser ton écriture il n'y a pas de secret : tu dois utiliser ta méthode en lui passant une seconde variable (ap1 dans ton exemple). Puis ensuite reprendre la valeur de ap1 et la mettre dans ap. -- Jérémy JEANSON, MCP
http://www.jjeanson.fr/
"ChC2B" a écrit dans le message de groupe de discussion : 4add518c$0$967$
Bonjour,
Dans le cadre de l'utilisation d'une API qui écrit dans une variable passée j'ai une erreur de tentative d'écriture sur une mémoire protogée. Exemple Declare Function MoveToEx Lib "gdi32" (ByVaL hdc As Integer, ByVaL x As Integer, ByVaL y As Integer, lpPoint As POINTAPI) As Integer
Dim ap(0) as pointapi
Movetoex( mhdc, ap(0).x,ap(0).y,ap(0)) ' erreur sur cette ligne
La solution qui marche c'est de déclarer une seconde variable ap1(0) et d'écrire :
Movetoex( mhdc, ap(0).x,ap(0).y,ap1(0))
Mais cela ne me convient pas, je souhaite utiliser la variable Ap(0), comment faire ?
A+
Bonjour ChC2B,
En fait ton souci viens de la ré-écriture que tu as fais de MoveToEx. Si tu
regarde dan la MSDN le dernier argument est un pointeur qui sert d.
http://msdn.microsoft.com/en-us/library/aa932127.aspx
Etant donnée qu'un pointeur ne peut être en même temps en entrée et en
sortie sur la même méthode, si tu veux utiliser ton écriture il n'y a pas de
secret : tu dois utiliser ta méthode en lui passant une seconde variable
(ap1 dans ton exemple). Puis ensuite reprendre la valeur de ap1 et la mettre
dans ap.
--
Jérémy JEANSON,
MCP
http://www.jjeanson.fr/
"ChC2B" <ChC2B@wanadoo.fr> a écrit dans le message de groupe de discussion :
4add518c$0$967$ba4acef3@news.orange.fr...
Bonjour,
Dans le cadre de l'utilisation d'une API qui écrit dans une variable
passée j'ai une erreur de tentative d'écriture sur une mémoire protogée.
Exemple
Declare Function MoveToEx Lib "gdi32" (ByVaL hdc As Integer, ByVaL x As
Integer, ByVaL y As Integer, lpPoint As POINTAPI) As Integer
Dim ap(0) as pointapi
Movetoex( mhdc, ap(0).x,ap(0).y,ap(0)) ' erreur sur cette ligne
La solution qui marche c'est de déclarer une seconde variable ap1(0) et
d'écrire :
Movetoex( mhdc, ap(0).x,ap(0).y,ap1(0))
Mais cela ne me convient pas, je souhaite utiliser la variable Ap(0),
comment faire ?
En fait ton souci viens de la ré-écriture que tu as fais de MoveToEx. Si tu regarde dan la MSDN le dernier argument est un pointeur qui sert d. http://msdn.microsoft.com/en-us/library/aa932127.aspx
Etant donnée qu'un pointeur ne peut être en même temps en entrée et en sortie sur la même méthode, si tu veux utiliser ton écriture il n'y a pas de secret : tu dois utiliser ta méthode en lui passant une seconde variable (ap1 dans ton exemple). Puis ensuite reprendre la valeur de ap1 et la mettre dans ap. -- Jérémy JEANSON, MCP
http://www.jjeanson.fr/
"ChC2B" a écrit dans le message de groupe de discussion : 4add518c$0$967$
Bonjour,
Dans le cadre de l'utilisation d'une API qui écrit dans une variable passée j'ai une erreur de tentative d'écriture sur une mémoire protogée. Exemple Declare Function MoveToEx Lib "gdi32" (ByVaL hdc As Integer, ByVaL x As Integer, ByVaL y As Integer, lpPoint As POINTAPI) As Integer
Dim ap(0) as pointapi
Movetoex( mhdc, ap(0).x,ap(0).y,ap(0)) ' erreur sur cette ligne
La solution qui marche c'est de déclarer une seconde variable ap1(0) et d'écrire :
Movetoex( mhdc, ap(0).x,ap(0).y,ap1(0))
Mais cela ne me convient pas, je souhaite utiliser la variable Ap(0), comment faire ?
A+
ChC2B
Jérémy Jeanson a écrit :
Bonjour ChC2B,
En fait ton souci viens de la ré-écriture que tu as fais de MoveToEx.
Merci, en fait de ré-écriture j'ai juste changer le long en Integer car j'avais un overflow avec la définition en Long. L'origine de ma question était qu'en fait en VB6 une utilisation telle que ne posait pas de problème, la première valeur du tableau étant passée comme adresse de pointeur sur le tableau, il y avait ré-écriture des valeurs "par dessus" par l'API sans que cela pose de problème. Globalement c'est pas le movetoex qui me posait problème, mais le fait est que de nombreuses API utilise ce genre de comportement (remplissage d'une valeur "retour" sur un des paramètres de la fonction) donc avant de me lancer dans du plus complexe je voulais avoir une idée du pourquoi.
Merci pour tout. A+
Jérémy Jeanson a écrit :
Bonjour ChC2B,
En fait ton souci viens de la ré-écriture que tu as fais de MoveToEx.
Merci, en fait de ré-écriture j'ai juste changer le long en Integer car
j'avais un overflow avec la définition en Long. L'origine de ma question
était qu'en fait en VB6 une utilisation telle que ne posait pas de
problème, la première valeur du tableau étant passée comme adresse de
pointeur sur le tableau, il y avait ré-écriture des valeurs "par dessus"
par l'API sans que cela pose de problème. Globalement c'est pas le
movetoex qui me posait problème, mais le fait est que de nombreuses API
utilise ce genre de comportement (remplissage d'une valeur "retour" sur
un des paramètres de la fonction) donc avant de me lancer dans du plus
complexe je voulais avoir une idée du pourquoi.
En fait ton souci viens de la ré-écriture que tu as fais de MoveToEx.
Merci, en fait de ré-écriture j'ai juste changer le long en Integer car j'avais un overflow avec la définition en Long. L'origine de ma question était qu'en fait en VB6 une utilisation telle que ne posait pas de problème, la première valeur du tableau étant passée comme adresse de pointeur sur le tableau, il y avait ré-écriture des valeurs "par dessus" par l'API sans que cela pose de problème. Globalement c'est pas le movetoex qui me posait problème, mais le fait est que de nombreuses API utilise ce genre de comportement (remplissage d'une valeur "retour" sur un des paramètres de la fonction) donc avant de me lancer dans du plus complexe je voulais avoir une idée du pourquoi.