cs_mabrouklepoux
Messages postés84Date d'inscriptionlundi 6 novembre 2000StatutMembreDernière intervention25 juillet 2008
-
10 déc. 2007 à 15:05
cs_mabrouklepoux
Messages postés84Date d'inscriptionlundi 6 novembre 2000StatutMembreDernière intervention25 juillet 2008
-
19 déc. 2007 à 10:32
Bonjour !
alors voila mon souci :
appli VB.net qui ouvre une pelletée de fichiers excel (une petite quizaine) pour y lire des données user (non modifiables en cours d'exe)
(à terme y aura du beau oracle à la place, mais pour le moment, c'est pas possible, donc vieux fichiers excel)
mon souci :
tout marche bien, pendant quelques minutes, mais après unmoment, j'ai par exemple un richtextbox qui vient se placer tout en haut à gauche de mon écran, et puis tout plante. En fait, retour au debbuggeur, avec des erreur genre outofspacememory, ou un autre qui y ressemble.
Bref, ma question avez vous deja eut ce pb de rtextbox qui se balade (l'affichage devient tout moche, avec des bouts de fenetres qui se dépalcent sur l'écran, on a tous deja vu ca dans d'autres applis. Mais si, quand vous voyez la moitié d'une fenetre, et la moitié d'une autre, en cliquant sur l'une ou l'autre, l'afficahge redevient normal)
dans ce prg j'utilise ==> de l'interfacage excel au grand complet, mais je pense pas que cela soit ca
en revanche, je lit les pixels à l'écran, je bouge la souris, fait des clic, ecrit du texte en pilotant clavier et souris
il y a sur ce site un prg appelé getpixel, qui fait exactement la meme erreur. si vous le lancez au bout de 10 minutes, il part en sucette, et un des champ du form vientse mettre en haut à gauche.
piste : le deboggeur ! j'ai remarqué que mon prg marche bien mieux en lancant directement l'exe, et non depuis vb (vbexpress d'ailleurs), mais puisque ce pb apparait de facon sporadique, je peux apss assurer que sans déboggueur ca marche.
Merci de votre aide, ca me panade pas mal cette betise là !
dernière chose :::: doevents
j'en avait mis quelques uns à des endroits qui me semblaient logiques.
mais, j'ai du tous les virer parceque de temps en temps j'aais du out of stack memory error, et ca plantait sur un doevents,
en les virant le pb est résolu. peut etre ca vient de là, mais alors, par quoi remplacer ce satané doevents ?
cs_mabrouklepoux
Messages postés84Date d'inscriptionlundi 6 novembre 2000StatutMembreDernière intervention25 juillet 20081 10 déc. 2007 à 16:59
j'essaie de suite, et direct je te dit que ca sent bon !!!
ca expliquerait pourquoi mon petite appli getpixel plante de la meme manière (j'ai du pomper un peu vite ;))
effectivement, j'ai dans mon code un
' Retourne l'identifiant du contexte graphique d'une fenêtre
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Integer) As Integer
il me faut faire un releaseDC après chaque appel à getDC???
j'ai effectivement aucun releaseDC dans mon code... je pensais que get DC renvoyait juste un pointer, pas tout une tripotée de cochonneries à nettoyer !
bien envie d'accepter ta réponse de suite, mais je vais vérifier avant ;), le pb étant que c'est du sporadique, donc si ca reproduit pas, ca voudra pas forcément dire que ...
mais c bien logique en tout cas, un grand MERCI !!!
cs_mabrouklepoux
Messages postés84Date d'inscriptionlundi 6 novembre 2000StatutMembreDernière intervention25 juillet 20081 18 déc. 2007 à 16:10
euh, j'ai le emme problème qui se présente à nouveau.
le releasedc à bien retardé le souci, mais il reste présent ...
aurais tu d'autres idées de fuites mémoires ?
j'ai un peu cherché je vois rien ...
cs_mabrouklepoux
Messages postés84Date d'inscriptionlundi 6 novembre 2000StatutMembreDernière intervention25 juillet 20081 19 déc. 2007 à 10:32
décidement !
tu as vraiment des intuitions incroyables !
j'ai effectivement des GDIS qui augmùentent régulièrement.
en cherchant, mon fuc... release marche pas,
chaque appel à ca :
Dim hdc As Int32
hdc = GetDC(Cuore.Handle)
' Pixel (X,Y) de l'écran (hwnd = 0)
' RGBPx = GetPixel(hdc, X, Y)
' 'ReleaseDC(Cuore.Handle, hdc)
If ReleaseDC(Cuore.Handle, hdc) = 0 Then
Debug.Print("erreur libération du DC 0 dans CurPixelColor")
End If
hdc = Nothing
crée un gdi de plus
le releasedc renvoi pourtant bien > 0
alors certes, il suffit que je mette ce hdc en var globale, que j'appele une seule fois getdc, mais c sale, et j'aimerais bien comprendre !!!!
en tout cas un grand merci, car quoi qu'il en soit, j'ai plus de fuite ...