OVH Cloud OVH Cloud

Call back dans VB qui "plante"

5 réponses
Avatar
François Müller
Bonjour

J'ai un petit problème basique, mais dont je ne viens pas à bout.

En gros, j'ai un programme en VB qui appel une fonction dans une DLL (en
C++). Cette fonction crée un certains nombre de thread, et retourne à
l'appelant. Les threads s'exécutent, mais périodiquement je souhaite
informer la programme client de l'état d'avancement des travaux, et j'ai
donc une adresse de callback d'une fonction de VB passée comme paramètre
depuis le programme VB à la fonction initiale. Or quand un des threads tente
un callback à VB, j'ai une erreur de violation de mémoire (la DLL n'est pas
en cause, car avec un prog de test en C comme client, les callbacks
s'effectuent correctement, n'est pas en cause non plus le contenu de la
fonciton VB appelée : même vide, ça "pète")

Si quelqu'un a une idée ...

Merci

PS j'ai un peu honte de poster un pb aussi "basique" , mais je coince depuis
cet AM

5 réponses

Avatar
Manuel Leclerc
François Müller a écrit :

En gros, j'ai un programme en VB qui appel une fonction dans
une DLL (en C++). [...] j'ai donc une adresse de callback
d'une fonction de VB passée comme paramètre depuis le
programme VB à la fonction initiale. Or quand un des threads
tente un callback à VB, j'ai une erreur de violation de mémoire
(la DLL n'est pas en cause, car avec un prog de test en C comme
client, les callbacks s'effectuent correctement, n'est pas en
cause non plus le contenu de la fonciton VB appelée : même
vide, ça "pète")



C'est peut être une histoire de convention d'appel : à la
"pascal" ou à la "C". Tu devrais poster les prototypes
de tes fonctions
Avatar
François Müller
"Manuel Leclerc" escribió en el mensaje
news:
| C'est peut être une histoire de convention d'appel : à la
| "pascal" ou à la "C". Tu devrais poster les prototypes
| de tes fonctions

Merci qd même, mais, non, ce n'est pas cela . (si la réponse eut été aussi
triviale je pense que j'aurais trouvé ;-)))
A vrai dire, le pb se produit aussi avec une fonction de callback sans
paramètre (j'ai essayé)

Non,à vrai dire, je soupçonne VB de ne pas admettre d'appels d'un thread
externe (car bien sur quand le callback s'effectue dans le corps de la
fonction appelée, ça marche : mais comme je veux un retour avant terminaison
des taches, c'est impossible)

F.
Avatar
Manuel Leclerc
François Müller a écrit :

Non,à vrai dire, je soupçonne VB de ne pas admettre
d'appels d'un thread externe (car bien sur quand le
callback s'effectue dans le corps de la fonction appelée,
ça marche : mais comme je veux un retour avant terminaison
des taches, c'est impossible)



http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q198/6/07.asp&NoWebContent=1

Il te reste à fournir un handle de fenêtre à ton API du début et à poster
des messages depuis tes threads :-)
Avatar
François Müller
"Manuel Leclerc" escribió en el mensaje
news:
|
| http://support.microsoft.com/default.aspx? ..

Merci beaucoup !!! (je m'en veut j'aurais pu chercher un peu plus ...)

F.
Avatar
Vincent Burel
"François Müller" wrote in message
news:c2a5pm$1pk7ek$

"Manuel Leclerc" escribió en el mensaje
news:
| C'est peut être une histoire de convention d'appel : à la
| "pascal" ou à la "C". Tu devrais poster les prototypes
| de tes fonctions

Merci qd même, mais, non, ce n'est pas cela . (si la réponse eut été


aussi
triviale je pense que j'aurais trouvé ;-)))
A vrai dire, le pb se produit aussi avec une fonction de callback sans
paramètre (j'ai essayé)

Non,à vrai dire, je soupçonne VB de ne pas admettre d'appels d'un thread
externe (car bien sur quand le callback s'effectue dans le corps de la
fonction appelée, ça marche : mais comme je veux un retour avant


terminaison
des taches, c'est impossible)



non, j'ai déjà fournit de la DLL "C" pour des clients qui programme en VB.
et y'avait du thread "C" qui appelait une callback sous VB.

Aucun problème si
-1- le fonction VB est correctement prototypée (bon type)
-2- la convention d'appel doit être __stdcall.

VB