Bonjour,
Je mets un sujet là-dessus parce que ça fait des mois que je trouve des AccesViolationException avec le message: "Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée." dans une application un peu "stressée" sans savoir pourquoi.
Après avoir enfin réussi à reproduire, j'ai le message "erreur de vérification étendue" lorsque l'exception est levée en mode debug.
Je viens de trouver que cela provient d'un problème de conversion entre des System.string (type .NET 2) et Borland.Delphi.System.String (type Delphi).
Je suis sous Rad Studio Delphi 2007.
je déclare mes string de la façon suivante :L'exception AccessViolationException est levée lorsque je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var s : string; obj : TObject; // ou obj : &Object;La raison est que s est un Borland.Delphi.System.String alors que ToString renvoie un System.string.
Code : Sélectionner tout - Visualiser dans une fenêtre à part s:= obj.ToString;
Et des ToString (ou d'autres fonctions .NET qui renvoient des System.String), il y en a beaucoup sur des Dataset ou autres objets .NET dans l'application que je gère.
La solution à ce problème est d'éviter le ToString si possible ou d'utiliser System.String à la place de string dans la déclaration (non testé pour l'instant).
Je ne sais pas si ça vaut une faq ou quoi mais je pense que ça a le mérite d'être au moins mis sur le forum.
Cordialement,
Arnaud DANEELS
Partager