IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

TJvComboBox VCL bug


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut TJvComboBox VCL bug
    Bonjour

    Je continue les tests fonctionnels après migration de mon appli de D6 à XE10.
    Aujourd'hui, crash fatal même pas intercepté par le try except qui contient le code.
    Il s'agit d'un composant de la JVCL : TJvComboBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      cbxNom.Items.BeginUpdate;
      try
        cbxNom.Items.Clear;
        cbxNom.Items.Add('');
    Et là, badaboum .... Tout fonctionne si je remplace cbxNom.Items.Add(''); par cbxNom.Items.Add('-');

    Quand je dis gros crash, ce n'est pas rien! Extrait journal événements Windows :

    Faulting application name: AppView.exe, version: 1.0.0.0, time stamp: 0x5c8683ad
    Faulting module name: KERNELBASE.dll, version: 10.0.14393.2791, time stamp: 0x5c5a43dc
    Exception code: 0xc0000005
    Fault offset: 0x000c7684
    Faulting process id: 0x76c
    Faulting application start time: 0x01d4d82a8b501cb9
    Faulting application path: D:\Apps\AppView.exe
    Faulting module path: C:\Windows\System32\KERNELBASE.dll
    Report Id: ec8c77d9-703b-4369-aca1-7f581e2b5785
    Faulting package full name:
    Faulting package-relative application ID:


    Ce composant a-t-il un mauvais karma ?


    Complément : J'ai extrait le code et le composant pour voir si ça ne venait pas d'un autre pan de l'application et c'est pareil, mais avec un peu de détails

    ---------------------------
    Notification des exceptions du débogueur
    ---------------------------
    Le projet Test.exe a déclenché la classe d'exception $C0000005 avec le message 'access violation at 0x76630bc9: write of address 0x0040a514'.
    ---------------------------
    Arrêter Continuer Aide
    ---------------------------

    ---------------------------
    Notification d'erreur du débogueur
    ---------------------------
    Echec du projet D:\Tests.exe avec le message : 'system exception (code 0xc000041d) at 0x76630bc9'. Processus arrêté. Utilisez Pas-à-pas ou Exécuter pour continuer.
    ---------------------------
    OK
    ---------------------------

    Nom : 2019-03-12_121610.png
Affichages : 312
Taille : 42,8 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      cbx.items.BeginUpdate;
      try
        cbx.Items.Clear;
        cbx.Items.Add('');
      except on E: Exception do
        ShowMessage(E.Message);
      end;
      cbx.items.EndUpdate;
    end;

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 097
    Par défaut
    Probablement une erreur à lecture de la chaine lors de l'affichage (durant le Message Paint donc en dehors de la section où tu fais le Add)

    Ton Jedi VCL est à jour ?
    J'ai eu aussi des surprises sur des chaines conversion AnsiString <-> String provoquant des violations d'accès et des erreurs d'instructions privilégiés qui passait très bien en XE2 VCL mais plus du tout en 10.2 FMX
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Pour la JVCL, j'ai fait l'installation à partir de GetIt.
    J'imagine que c'est la version la plus à jour.
    Pour le moment, j'ai résolu en ajoutant un espace plutôt qu'un blanc et partout où un test est fait sur une chaîne vide, je fais un trim de la valeur.
    De cette façon, je contourne le problème sans toucher au composant lui-même.

    J'espère ne pas avoir trop de surprise de ce genre jusqu'à la fin du projet :-)

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    J'ai trouvé la source du problème.
    Le composant a une propriété CharCase.
    Avec sa valeur par défaut ecNormal, ça ne plante pas.
    Mais avec ecUpperCase ou ecLowercase, c'est l'erreur assurée.

    Je viens de tester le changement de la valeur de propriété après ajout de la chaîne et ça plante quand on revient en ecUppercase

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      cbx.items.BeginUpdate;
      try
        cbx.Items.Clear;
        cbx.CharCase := ecNormal;
        cbx.Items.Add('');                                         // là ça passe 
        cbx.CharCase := ecUpperCase;  // <<<<<<<<<<<<< crash
      except on E: Exception do
        ShowMessage(E.Message);
      end;
      cbx.items.EndUpdate;

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 941
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 941
    Par défaut
    J'ai téléchargé la source pour voir et il y a clairement une erreur.

    Lorsque Value (sur Add donc) contient une chaîne vide, elle pointe sur une adresse constante en lecture seule (la même pour toutes les chaînes vides).

    Les VCL et JVCL contiennent la même mise en garde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Comclt32.dll version 5.0 or later: If CBS_LOWERCASE or CBS_UPPERCASE is set, the Unicode version of
    // CB_ADDSTRING alters the string. If using read-only global memory, this causes the application to fail.
    En VCL, une nouvelle chaîne est allouée ne contenant que #0. On ne pointe plus sur une zone read-only contrairement à la JVCL.

    Résultat, passe par Add(#0).

  6. #6
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Là, je dis : "Monsieur"

    Un grand merci pour ce qui va m'éviter des tests fonctionnels qui auraient été nécessaires par l'utilisation du Trim.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bug avec les styles VCL Delphi Berlin 10.1
    Par McIntosh dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/10/2016, 14h21
  2. Un bug hallucinant de la VCL (CB5)
    Par yarp dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/06/2009, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo