Alors voici le code coupable dans Delphi 7 - Sans Patch, je testerais une machine patchée pour rigoler ...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !