Call back dans VB qui "plante"

Le
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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Manuel Leclerc
Le #9870881
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
François Müller
Le #9870871
"Manuel Leclerc" 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.
Manuel Leclerc
Le #9870861
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 :-)
François Müller
Le #9870851
"Manuel Leclerc" news:
|
| http://support.microsoft.com/default.aspx? ..

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

F.
Vincent Burel
Le #9870821
"François Müller" news:c2a5pm$1pk7ek$

"Manuel Leclerc" 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
Publicité
Poster une réponse
Anonyme