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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
var s : string;
    obj : TObject; // ou obj : &Object;
L'exception AccessViolationException est levée lorsque je faisLa raison est que s est un Borland.Delphi.System.String alors que ToString renvoie un System.string.

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