PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Pb utilisation Callback
Pb utilisation Callback
Started by guest, Apr., 20 2006 1:04 PM - 7 replies
Posted on April, 20 2006 - 1:04 PM
Bonjour a tous,

Mon application utilise une Dll (ecrit en C++) dont une methode a besoin d'une Callback (long, long, long, char*, long).

-> il semble que WD n'accepte, pour ma callback, que (entier sur 4, entier sur 4, entier sur 4, entier sur 4, entier sur 4)

Sur appel de la methode, j'ai bien appel de ma Callback (execution du contenu) par contre sur sa sortie j'ai un message d'erreur :

"Microsoft Visual C++ Debug Error !!! ... The value of ESP was not properly saved across a fonction call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."

QQ'1 a une petite idee ??? HELPPP =;o(

C'est le "char*" qui poserait probleme ? Si oui comment puis-je declarer cela sans dire que c'est un entier (pour une adresse) ?

Merci d'avance a tous.

Cdt.
Posted on April, 20 2006 - 1:46 PM
sauf erreur de ma part, dans l'entete de ta fonction dans windev
remplace les "entier sur 4" par des "entier" meme si, on est bien
d'accord, ca devrait etre des entiers sur 4.

dans une ancienne version 9 j'avais eu le soucis si mes souvenirs
sont bons ;)

ben dev
eric l.

Syrrius a écrit :
Bonjour a tous,

Mon application utilise une Dll (ecrit en C++) dont une methode a besoin d'une Callback (long, long, long, char*, long).

-> il semble que WD n'accepte, pour ma callback, que (entier sur 4, entier sur 4, entier sur 4, entier sur 4, entier sur 4)

Sur appel de la methode, j'ai bien appel de ma Callback (execution du contenu) par contre sur sa sortie j'ai un message d'erreur :

"Microsoft Visual C++ Debug Error !!! ... The value of ESP was not properly saved across a fonction call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."

QQ'1 a une petite idee ??? HELPPP =;o(

C'est le "char*" qui poserait probleme ? Si oui comment puis-je declarer cela sans dire que c'est un entier (pour une adresse) ?

Merci d'avance a tous.

Cdt.
Posted on April, 20 2006 - 1:47 PM
Dans son message, Syrrius racontait :

Bonjour a tous,

Mon application utilise une Dll (ecrit en C++) dont une methode a besoin d'une Callback (long, long, long, char*, long).

-> il semble que WD n'accepte, pour ma callback, que (entier sur 4, entier sur 4, entier sur 4, entier sur 4, entier sur 4)

Sur appel de la methode, j'ai bien appel de ma Callback (execution du contenu) par contre sur sa sortie j'ai un message d'erreur :

"Microsoft Visual C++ Debug Error !!! ... The value of ESP was not properly saved across a fonction call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."

QQ'1 a une petite idee ??? HELPPP =;o(

C'est le "char*" qui poserait probleme ? Si oui comment puis-je declarer cela sans dire que c'est un entier (pour une adresse) ?

Merci d'avance a tous.

Cdt.


Tu peux essayer de mettre "chaine sur 255" a la place de ton entier (ou n'importe quelle taille > taille max renvoyée par le callback), ca devrait
marcher.

Bon dev
--
Lionel

mailto:lionel.breil*NOSPAM*@gmail.com
(retirer *NOSPAM* pour m'écrire)
Posted on April, 20 2006 - 4:58 PM
Bonjour a vous,

J'ai teste vos 2 remarques :

-> RQ1 "mettre entier a la place de entier sur 4" :

Cela n'a rien change. j'ai toujours le probleme en sortie de ma callback.
(avec l'entier pour char*, j'arrive bien a recuperer ma chaine via "Transfert")

-> RQ2 "mettre chaine sur 255" :

J'obtiens un message d'erreur des l'appel de la Callback (en entree) me disant "Un élément de type entier ne peut pas être converti vers le type chaîne ..."


Mon probleme reste donc entier mais je vous remercie, tout de meme, pour votre aide.

Cdt.
Posted on April, 20 2006 - 4:59 PM
si la fonction est censée recevoir un char * en mettant un char[255] ou
autre tu es sûr que ca marche ?

ou alors windev fait un petit traitement dans son coin ?

eric l.

Lionel a écrit :
Dans son message, Syrrius racontait :
Bonjour a tous,

Mon application utilise une Dll (ecrit en C++) dont une methode a besoin d'une Callback (long, long, long, char*, long).

-> il semble que WD n'accepte, pour ma callback, que (entier sur 4, entier sur 4, entier sur 4, entier sur 4, entier sur 4)

Sur appel de la methode, j'ai bien appel de ma Callback (execution du contenu) par contre sur sa sortie j'ai un message d'erreur :

"Microsoft Visual C++ Debug Error !!! ... The value of ESP was not properly saved across a fonction call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."

QQ'1 a une petite idee ??? HELPPP =;o(

C'est le "char*" qui poserait probleme ? Si oui comment puis-je declarer cela sans dire que c'est un entier (pour une adresse) ?

Merci d'avance a tous.

Cdt.

Tu peux essayer de mettre "chaine sur 255" a la place de ton entier (ou n'importe quelle taille > taille max renvoyée par le callback), ca devrait
marcher.

Bon dev
Posted on April, 20 2006 - 5:19 PM
Un char[255] est un char* auquel on a donné une taille...
en C/C++ char* est aussi bien utilisé pour désigner un pointeur de caractere qu'un tableau de caracteres
Donc ca aurait pu marcher (ce qui n'est pas le cas aux vues du dernier message)

Dans son message, eric l racontait :

si la fonction est censée recevoir un char * en mettant un char[255] ou
autre tu es sûr que ca marche ?

ou alors windev fait un petit traitement dans son coin ?

eric l.


--
Lionel

mailto:lionel.breil*NOSPAM*@gmail.com
(retirer *NOSPAM* pour m'écrire)
Posted on April, 20 2006 - 6:02 PM
et en ne typant pas les paramètres de ta fonction de callback ?

pour essayer ;)

bon courage
eric l.

Syrrius a écrit :
Bonjour a vous,

J'ai teste vos 2 remarques :

-> RQ1 "mettre entier a la place de entier sur 4" :

Cela n'a rien change. j'ai toujours le probleme en sortie de ma callback.
(avec l'entier pour char*, j'arrive bien a recuperer ma chaine via "Transfert")

-> RQ2 "mettre chaine sur 255" :

J'obtiens un message d'erreur des l'appel de la Callback (en entree) me disant "Un élément de type entier ne peut pas être converti vers le type chaîne ..."


Mon probleme reste donc entier mais je vous remercie, tout de meme, pour votre aide.

Cdt.
Posted on April, 20 2006 - 7:00 PM
Un char[255] est un char* auquel on a donné une taille...
en C/C++ char* est aussi bien utilisé pour désigner un pointeur

> de caractere qu'un tableau de caracteres
> Donc ca aurait pu marcher (ce qui n'est pas le cas aux vues du
> dernier message)


pour insister un peu, entre un char[255] et un char * ya au
moins la différence de la méthode d'allocation (et le fait que
l'un est désalloué "automatiquement")...

mais il est vrai que dans le contexte de la fonction de callback
de windev ca ne doit pas faire une grosse différence
effectivement.

;)
eric l.