Syntaxe des Exception dans une Finalization d'une unité compilée dans un DPK
Alors voici le code coupable dans Delphi 7 - Sans Patch, je testerais une machine patchée pour rigoler ...
Code:
1 2 3 4 5 6 7 8
| finalization
try
SingletonBidule.Free;
except
on E: Exception do
OutputDebugString(PChar(Format('uBidule finalization - Erreur %s, Message %s', [E.ClassName, E.Message])));
end;
end; |
ce code est lancée dans toutes nos applications, parfois le Free provoquait une Exception en RunTime, qui ne pouvant se dérouler correctement provoque une RunTime Error 216, l'exception se délenchant loin dans le code, solution du pauvre..., un OutputDebugString pour constater l'Erreur dans le Journal d'Evènement de Delphi en Debugging ... mais pas chez les clients ...
Ce code compile très bien pour générer un Exe ... mais il ne compile pour un DPK
voici, le code qui compile :
Code:
1 2 3 4 5 6 7
| finalization
try
SingletonBidule.Free;
except
on E: Exception do OutputDebugString(PChar(Format('uBidule finalization - Erreur %s, Message %s', [E.ClassName, E.Message])));
end;
end; |
Eh oui, magique non, juste un retour charriot, et pour nous éviter la même mésaventure (outil de formattage de source qui risque de remettre un retour charriot donc soucis), j'ai préféré transformé le code en ceci :
Code:
1 2 3 4 5 6 7 8 9
| finalization
try
SingletonBidule.Free;
except
OutputDebugString(PChar(Format(
'uBidule finalization - Erreur %s, Message %s',
[Exception(ExceptObject()).ClassName, Exception(ExceptObject()).Message])));
end;
end; |
le plus drôle, c'est que le Retour Charriot ne pose problème qu'avec la construction "on E: Exception do" mais pas pour le reste !
Voilà, c'était l'étrangeté du Jour !