Problème Exécution en Release mais pas en Debug
Bonjour à tous,
Je suis face à un problème que je n'arrive pas à résoudre... J'espère que les pros du VB seront là pour y remédier...
Je suis en train de porter une appli VB6 de Windows 2000 Server vers Windows 2003 Server. POur le moment, tous mes composants passent bien (Dll(s) et Exe(s)) mais j'ai un dernier Exe qui me sert à tester une fonctionnalité du programme.
Ce dernier passe avec succès en mode Debug, mais lorsque je crée l'exe et que je le lance, lorsque j'arrive sur une des fonctionnalités, le programme me sort une erreur : Run-time error '440': Automation error
Je n'arrive pas à comprendre d'où cela peut venir..... Surtout qu'en mode Debug, tout fonctionne à merveille....
Donc je m'en remets à vous... Je ne sais plus où chercher....
En espérant que quelqu'un puisse me venir en aide !!!!
++
Librairies utilisées pour le projet
Voici la liste des librairies utilisées pour le projet :
Visual Basic For Applications
Visual Basic runtime objects and procedures
Visual Basic objects and procedures
OLE Automation
Microsoft XML, v3.0
Microsoft Scripting Runtime
Microsoft Visual Basic 6.0 Extensibility
Microsoft Internet Controls ->(shdocvw.dll)
Microsoft Internet Controls ->(shdocvw.oca)
Microsoft ActiveX Data Objects 2.6 Library
Micsosoft Active Server Page Object Library
Micsosoft Active Server Page ObjectContext Object
TIBCO Rendezvous 7.2 (librairie Tibco qui nous sert à envoyer / recevoir des données temps réel entre applications)
Je ne sais pas si ça peut vous éclairer sur un éventuel problème...???
Je me remets au boulot pour trouver la résolution de ce problème !!
++
Avancée dans l'analyse de l'erreur
Citation:
J'aimerais bien avoir plus d'info la dessus : Fait tu play avec ou sans point d'arrêt.
En gros est ce que cela à déjà fonctionner en mode débug sans mettre de point d'arrêt ?
Oui, cela fontionne avec ou sans point d'arrêt indéfféremment, quand je le lance en faisant "Play" dans VisualStudio6.
Citation:
Je vais commencer à les mettre et je vous donne des news...
Je viens de trouver le moment exact où ça plante.
J'explique rapidement comment fontionne le programme. Il y a des boutons sur le form et on a des boutons qui sont actifs ou inactifs suivant le stade d'avancement (il y a par exemple un bouton Create, Puis un bouton Initialiser qui s'active quand le Create a fini, etc...)
A un moment, je fais un Load File, et il passe dans le code ci-dessous
Tout se passe bien pour le moment (tm a un state = 2)
Puis je clique sur un autre bouton, et tm a toujours state = 2 (c'est voulu que le state de tm ne change pas entre les deux clics)
Donc je repasse au même endroit, je rentre bien dans le if
Et il se plante sur le "LastTimeLabel.Caption = "NO VALUE AVAILABLE""
Pour mémoire, Je me retrouve avec une erreur :
Run-time error '440':
Automation error
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
If tm.GetState = 2 Then
LastTimeLabel.Caption = "NO VALUE AVAILABLE"
If lt2 = -1 Then
LastTimeValideLabel.Caption = "NO VALUE AVAILABLE"
Else
LastTimeValideLabel.Caption = CStr(lt2) & " s" & ", " & CStr(lt2 / LastDealCount) & " s/deal"
End If
Frame2.Enabled = True
Frame2.Caption = "Lot en cours - " & tm.GetCurrentTKBlockID
'Frame3.Enabled = True
'LogGrid.Visible = True
StatusLabel.ForeColor = &HC000&
StatusLabel.Caption = "(2) TRANSACTING"
CreateBtn.Enabled = False
InitBtn.Enabled = False
BeginBtn.Enabled = False
PriceBtn.Enabled = True
RollbackBtn.Enabled = True
CommitBtn.Enabled = False
CancelPriceBtn.Enabled = False
DestroyBtn.Enabled = True
SaveBtn.Enabled = True
LoadBtn.Enabled = True
CopyBtn.Enabled = True
PasteBtn.Enabled = True
LoadDealBtn.Enabled = True
UpdateDealBtn.Enabled = False
RemoveDealBtn.Visible = True
AddDealBtn.Visible = True
AddDealBtn.Enabled = True
InstrCombo.Visible = True
DealList.Visible = True
ViewerBtn.Visible = True
Viewer2Btn.Visible = True
Exit Sub |
Petite précision sur l'analyse de l'erreur
Je viens de tester de mettre en commentaire le
"LastTimeLabel.Caption = "NO VALUE AVAILABLE""
A ce moment là il plante sur le suivant (LastTimeValideLabel.Caption = "NO VALUE AVAILABLE")
et ainsi de suite.......
++
Bon alors voilà des nouvelles... On avance petit à petit...
Citation:
pour vérifier que tes controles sont toujours là avec leur nom d'origine, tu peux ajouter ça en début de ta procédure :
Code :
Code:
1 2 3 4 5
|
Dim toto As Control
For Each toto In MainWindows
MsgBox toto.Name
Next |
Excellent comme Idée
Résultat :
Passage avec le bouton1 (LoadBtn) -> 33 éléments
Passage avec le bouton2 (PriceBtn) -> Plantage Erreur 440
Citation:
Tes labels se trouve où ? Directement sur la form ? dans un panel ou un autre container ?
Mes labels sont directement dans mon Form MainWindow
Citation:
tu charges comment ta mainwindow ? Essaye si ce n'est pas déjà comme ça que tu fais de l'instancier de la sorte dès le départ :
Ma MainWindow est lancée par défaut et c'est toujours sur cette form que je clique (au fur et à mesure des clics, certains boutons s'activent ou pas, mais je reste toujours UNIQUEMENT sur la même Form....
Un peu plus de Code (Accepté par la hiérarchie :) )
Code LoadBtn_Click (le bouton 1 qui fontionne)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
Private Sub LoadBtn_Click()
On Error GoTo ErrorHandler:
InitComboDeal
CommonDlg.DialogTitle = "Charger un lot"
CommonDlg.DefaultExt = "xml"
CommonDlg.Filter = "*.xml"
CommonDlg.FilterIndex = 0
CommonDlg.ShowOpen
If (True) And (CommonDlg.filename <> "") Then
Dim content As String
'Open CommonDlg.FileName For Binary Access Read As #1
'Input #1, content
'Close #1
Dim Node As MSXML2.IXMLDOMNode
Dim block As MSXML2.IXMLDOMElement
Dim bs As BlockSerializer
Dim xmldoc As MSXML2.DOMDocument30
Dim root As MSXML2.IXMLDOMElement
Set bs = New BlockSerializer
Set xmldoc = New MSXML2.DOMDocument30
If Not xmldoc.Load(CommonDlg.filename) Then MsgBox "Error loadXML" 'Error (0)
For Each Node In xmldoc.documentElement.childNodes
If Node.nodeName = "BLOCK" Then
Set block = Node
End If
Next
bs.ReadBlockTM tm, block
End If
RefreshInterface
RefreshDealList
RefreshLogList
Exit Sub
ErrorHandler:
MsgBox "Impossible de charger le lot !"
tm.RollbackBlock
RefreshInterface
RefreshDealList
RefreshLogList
End Sub |
Code de PriceBtn_Click (bouton2 qui plante)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
Private Sub PriceBtn_Click()
Dim t1 As Date
Dim t2 As Date
Dim r As Boolean
t1 = Now
r = tm.PriceBlock
t2 = Now
lt = DateDiff("s", t1, t2)
RefreshLogList
RefreshInterface
If Not r Then
ErrorDialog.ViewError tm.GetLastErrorObject
End If
End Sub |
Code de RefreshInterface, la procédure où ça plante. Elle est appelée par les 2 boutons, et les 2 boutons passent chacun au même endroit, dans le If tm.Getstate = 2
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
|
Private Sub RefreshInterface()
If tm Is Nothing Then
LastTimeLabel.Caption = "NO VALUE AVAILABLE"
If lt2 = -1 Then
LastTimeValideLabel.Caption = "NO VALUE AVAILABLE"
Else
LastTimeValideLabel.Caption = CStr(lt2) & " s" & ", " & CStr(lt2 / LastDealCount) & " s/deal"
End If
Frame2.Enabled = False
Frame2.Caption = "Lot en cours"
'Frame3.Enabled = False
'LogGrid.Visible = False
StatusLabel.ForeColor = &H0
StatusLabel.Caption = "NOT CREATED"
CreateBtn.Enabled = True
InitBtn.Enabled = False
BeginBtn.Enabled = False
PriceBtn.Enabled = False
RollbackBtn.Enabled = False
CommitBtn.Enabled = False
CancelPriceBtn.Enabled = False
DestroyBtn.Enabled = False
SaveBtn.Enabled = False
LoadBtn.Enabled = False
CopyBtn.Enabled = False
PasteBtn.Enabled = False
LoadDealBtn.Enabled = False
UpdateDealBtn.Enabled = False
RemoveDealBtn.Visible = False
AddDealBtn.Visible = False
InstrCombo.Visible = False
DealList.Visible = False
ViewerBtn.Visible = False
Viewer2Btn.Visible = False
Exit Sub
End If
If tm.GetState = 0 Then
LastTimeLabel.Caption = "NO VALUE AVAILABLE"
If lt2 = -1 Then
LastTimeValideLabel.Caption = "NO VALUE AVAILABLE"
Else
LastTimeValideLabel.Caption = CStr(lt2) & " s" & ", " & CStr(lt2 / LastDealCount) & " s/deal"
End If
Frame2.Enabled = False
Frame2.Caption = "Lot en cours"
'Frame3.Enabled = False
'LogGrid.Visible = False
StatusLabel.ForeColor = &HFF&
StatusLabel.Caption = "(0) NOT READY"
CreateBtn.Enabled = False
InitBtn.Enabled = True
BeginBtn.Enabled = False
PriceBtn.Enabled = False
RollbackBtn.Enabled = False
CommitBtn.Enabled = False
CancelPriceBtn.Enabled = False
DestroyBtn.Enabled = True
SaveBtn.Enabled = False
LoadBtn.Enabled = False
CopyBtn.Enabled = False
PasteBtn.Enabled = False
LoadDealBtn.Enabled = False
UpdateDealBtn.Enabled = False
RemoveDealBtn.Visible = False
AddDealBtn.Visible = False
InstrCombo.Visible = False
DealList.Visible = False
ViewerBtn.Visible = False
Viewer2Btn.Visible = False
Exit Sub
End If
If tm.GetState = 1 Then
LastTimeLabel.Caption = "NO VALUE AVAILABLE"
If lt2 = -1 Then
LastTimeValideLabel.Caption = "NO VALUE AVAILABLE"
Else
LastTimeValideLabel.Caption = CStr(lt2) & " s" & ", " & CStr(lt2 / LastDealCount) & " s/deal"
End If
Frame2.Enabled = False
Frame2.Caption = "Lot en cours"
'Frame3.Enabled = False
'LogGrid.Visible = False
StatusLabel.ForeColor = &H80C0FF
StatusLabel.Caption = "(1) READY"
CreateBtn.Enabled = False
InitBtn.Enabled = False
BeginBtn.Enabled = True
PriceBtn.Enabled = True
RollbackBtn.Enabled = False
CommitBtn.Enabled = False
CancelPriceBtn.Enabled = False
DestroyBtn.Enabled = True
SaveBtn.Enabled = False
LoadBtn.Enabled = True
CopyBtn.Enabled = False
PasteBtn.Enabled = True
LoadDealBtn.Enabled = True
UpdateDealBtn.Enabled = False
RemoveDealBtn.Visible = False
AddDealBtn.Visible = False
InstrCombo.Visible = False
DealList.Visible = False
ViewerBtn.Visible = False
Viewer2Btn.Visible = False
Exit Sub
End If
If tm.GetState = 2 Then
'---------------
Dim toto As Control
MsgBox (MainWindow.Count)
For Each toto In MainWindow
MsgBox toto.Name
Next
'---------------
MsgBox ("avant nouveau test")
MainWindow.LastTimeLabel.Caption = "TEST"
MsgBox ("après nouveau test - avant ancien test")
LastTimeLabel.Caption = "NO VALUE AVAILABLE"
MsgBox ("après ancien test")
If lt2 = -1 Then
LastTimeValideLabel.Caption = "NO VALUE AVAILABLE"
Else
LastTimeValideLabel.Caption = CStr(lt2) & " s" & ", " & CStr(lt2 / LastDealCount) & " s/deal"
End If
Frame2.Enabled = True
Frame2.Caption = "Lot en cours - " & tm.GetCurrentTKBlockID
'Frame3.Enabled = True
'LogGrid.Visible = True
StatusLabel.ForeColor = &HC000&
StatusLabel.Caption = "(2) TRANSACTING"
CreateBtn.Enabled = False
InitBtn.Enabled = False
BeginBtn.Enabled = False
PriceBtn.Enabled = True
RollbackBtn.Enabled = True
CommitBtn.Enabled = False
CancelPriceBtn.Enabled = False
DestroyBtn.Enabled = True
SaveBtn.Enabled = True
LoadBtn.Enabled = True
CopyBtn.Enabled = True
PasteBtn.Enabled = True
LoadDealBtn.Enabled = True
UpdateDealBtn.Enabled = False
RemoveDealBtn.Visible = True
AddDealBtn.Visible = True
AddDealBtn.Enabled = True
InstrCombo.Visible = True
DealList.Visible = True
ViewerBtn.Visible = True
Viewer2Btn.Visible = True
Exit Sub
End If
If tm.GetState = 3 Then
MsgBox ("State 3")
'LastTimeLabel.Caption = CStr(lt) & " s" & ", " & CStr(lt / tm.Deals.Count) & " s/deal"
'If lt2 = -1 Then
' LastTimeValideLabel.Caption = "NO VALUE AVAILABLE"
'Else
' LastTimeValideLabel.Caption = CStr(lt2) & " s" & ", " & CStr(lt2 / LastDealCount) & " s/deal"
'End If
Frame2.Enabled = True
Frame2.Caption = "Lot en cours - " & tm.GetCurrentTKBlockID
'Frame3.Enabled = True
'LogGrid.Visible = True
StatusLabel.ForeColor = &HFF00&
StatusLabel.Caption = "(3) VALIDABLE"
CreateBtn.Enabled = False
InitBtn.Enabled = False
BeginBtn.Enabled = False
PriceBtn.Enabled = True
RollbackBtn.Enabled = True
CommitBtn.Enabled = True
CancelPriceBtn.Enabled = True
DestroyBtn.Enabled = True
SaveBtn.Enabled = True
LoadBtn.Enabled = True
CopyBtn.Enabled = True
PasteBtn.Enabled = True
LoadDealBtn.Enabled = True
UpdateDealBtn.Enabled = False
RemoveDealBtn.Visible = True
AddDealBtn.Visible = True
AddDealBtn.Enabled = False
InstrCombo.Visible = True
DealList.Visible = True
ViewerBtn.Visible = True
Viewer2Btn.Visible = True
Exit Sub
End If
End Sub |
En espérant que ça vous éclaire !!!