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

Langage Delphi Discussion :

[D11.2][Android] If unString[0]='A' then en erreur de compilation


Sujet :

Langage Delphi

  1. #1
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2 005
    Points : 6 284
    Points
    6 284
    Par défaut [D11.2][Android] If unString[0]='A' then en erreur de compilation
    Bonjour,

    J'essaie de compiler sous Delphi 11.2 un projet Android réalisé sous Delphi 10.3 et cela plante avec des erreurs identifiées quand je teste la valeur du premier caractère dans un string

    "If unString[0]='A' then ..." me donne un "[DCC Erreur]...: E2157 Element 0 inaccessible - utilisez 'Length' ou 'SetLength' "

    Par contre un "If unString[1]='A' then ..." se compile!



    C'est un bug du compilateur ou est-ce voulu?

    En tout cas jusqu'à Delphi 10.3, il y avait une histoire pour accéder au premier caractère d'un string avec l'usage d'un ...[1] pour une app windows et ...[0] pour une app Android. Est-ce que cela aurait changer avec Delphi11.2 avec un ...[1] pour les app win et Android?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 812
    Points : 13 527
    Points
    13 527
    Par défaut
    Oui ça a changé depuis 10.4.

    Utilise UnString.Chars[0] pour être en base 0 quelque soit la plateforme.
    Mais si le projet est conséquent et que tu ne veux pas tout modifier, tu peux toujours jouer sur la directive {$ZEROBASEDSTRINGS ON/OFF}.

  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Citation Envoyé par Anselme45 Voir le message
    C'est un bug du compilateur ou est-ce voulu?
    Nouveauté mise en place en 10.4 pour retrouver une cohérence quelle que soit la plateforme (car avant le même code ne donnait pas la même chose selon que tu l'exécutais en Windows ou Android par exemple.

    Par défaut, ou en activant la directive ZEROBASEDSTRINGS à la main (elle est censée l'être par défaut maintenant), les fonctions et procédures de SysUtils ont des chaînes ayant le premier Char en index 1, les helpers ont un indice 0 pour le premier.

    D'une manière générale, ne pas mélanger les deux types de fonctions si on s'amuse à manipuler les caractères ou leur position. Ca évite les soucis et permet de rester rétro compatible avec des versions avant la 10.4 Sydney.

    Je ne dis pas de se taper les 1 à 5 heures de rediffusion des présentations des nouveautés qu'on fait (même si c'est toujours intéressant d'avoir des retours à postériori), mais je suggère vivement de télécharger les PDF des présentations quand on les met en ligne pour voir les points importants qui ne sont pas forcément mis en valeur dans les présentations officielles en anglais ou parfois paumés dans les "release notes" et autres "what's new" du docwiki.

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2 005
    Points : 6 284
    Points
    6 284
    Par défaut
    Merci pour l'info.

    1. Quand on a des contraintes temporelles pour sortir des versions d'une gamme logicielle, on n'a pas souvent l'occasion de passer des heures à suivre les présentations ou lire des kilomètres de commentaires sur les changements de la versions X ou Y pour au final trouver LA phrase qui nous concerne.

    2. Dans le cas présent, il est peut-être heureux d'avoir un [1] qui correspond au 1er caractère d'un string aussi bien pour Android que Windows, mais dans mon cas, cela m'empêche tout simplement d'adopter une nouvelle version Delphi tout les 6 mois!

    Quand on doit maintenir de gros projets développés en Delphi comportant de nombreuses app, on ne peut pas se retrouver à passer des jours à modifier du code sans ajouter de nouvelles fonctions majeures (mais par contre des bugs!) uniquement pour réussir à le compiler sur une nouvelle version de Delphi.

    Donc Delphi 11 peut-être pour un nouveau projet, mais pour maintenir un projet existant autant rester sur la version Delphi à l'origine du développement.

    Avec Delphi, il y avait donc déjà une doc qui ne suit pas, voilà que l'on a droit au Delphi qui ne permet plus de compiler un code Delphi (bonjour la retro-compatibilité)!

    Et je précise que ce n'est pas la première mauvaise expérience que je fais, j'avais une app qui lit des codes-barres via la caméra d'un téléphone Android qui en passant à une nouvelle version de Delphi compile toujours mais... ne fonctionne plus!

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Anselme45 Voir le message
    Merci pour l'info.

    1. Quand on a des contraintes temporelles pour sortir des versions d'une gamme logicielle, on n'a pas souvent l'occasion de passer des heures à suivre les présentations ou lire des kilomètres de commentaires sur les changements de la versions X ou Y pour au final trouver LA phrase qui nous concerne.
    c'est pour cela qu'il est préférable de migrer assez rapidement sur la dernière version, si tu laisses passer trop de version tu as un gap qui fait perdre beaucoup de temps

    Citation Envoyé par Anselme45 Voir le message
    2. Dans le cas présent, il est peut-être heureux d'avoir un [1] qui correspond au 1er caractère d'un string aussi bien pour Android que Windows, mais dans mon cas, cela m'empêche tout simplement d'adopter une nouvelle version Delphi tout les 6 mois!
    non, il suffit d'utiliser {$ZEROBASEDSTRINGS ON} pour revenir au comportement précédent en attendant de faire les modifications nécessaires...d'ailleurs je teste toujours mes développement Android sous Windows car c'est plus rapide...sauf si tu ne le fais pas, tu dois donc déjà avoir des $IFDEF pour ça.

    Citation Envoyé par Anselme45 Voir le message
    Quand on doit maintenir de gros projets développés en Delphi comportant de nombreuses app, on ne peut pas se retrouver à passer des jours à modifier du code sans ajouter de nouvelles fonctions majeures (mais par contre des bugs!) uniquement pour réussir à le compiler sur une nouvelle version de Delphi.
    c'est d'autant plus rapide qu'on passe de la version n à n+1 et non n+2 ou 3

    Citation Envoyé par Anselme45 Voir le message
    Donc Delphi 11 peut-être pour un nouveau projet, mais pour maintenir un projet existant autant rester sur la version Delphi à l'origine du développement.

    Avec Delphi, il y avait donc déjà une doc qui ne suit pas, voilà que l'on a droit au Delphi qui ne permet plus de compiler un code Delphi (bonjour la retro-compatibilité)!
    ce genre de modifications majeures sont clairement indiquées dans l'aide en ligne dans la rubrique nouveautés de la version

    Citation Envoyé par Anselme45 Voir le message
    Et je précise que ce n'est pas la première mauvaise expérience que je fais, j'avais une app qui lit des codes-barres via la caméra d'un téléphone Android qui en passant à une nouvelle version de Delphi compile toujours mais... ne fonctionne plus!
    oui, mais pour Android et iOS le problème c'est que c'est l'OS qui impose des modifications qui font qu'il est nécessaire de modifier Delphi. Sur Android tu as régulièrement des changements de politique de sécurité qui affectent tous les développeurs sur tous les langages, pas uniquement Delphi...quand on passe d'une entrée dans le fichier Manifest pour avoir des droits à l'appel à une fonction qui les demande, il n'est pas évident de rendre ça transparent pour le développeur Delphi.

    j'ai un ou deux projets sous Android Studio, quand je le lance j'ai presque systématiquement une mise à jour (car je ne l'utilise pas souvent) et ça me prend toujours beaucoup de temps pour pouvoir recompiler mon projet car tel option Gradle n'est plus valide, ou tel library a changé etc...c'est tout aussi pénible

    je me souviens du plus gros problème que j'ai rencontré, quand Android a soudainement décidé qu'il était interdit de faire une requête HTTP depuis le thread principal

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 21/06/2022, 08h20
  2. [WD20] Erreur sur compilation ANDROID
    Par xael34 dans le forum WinDev
    Réponses: 4
    Dernier message: 25/11/2021, 10h38
  3. Erreur de compilation dans Android Studio 'cannot find symbol db'
    Par cloclo68 dans le forum Android Studio
    Réponses: 1
    Dernier message: 25/09/2016, 16h19
  4. [Android] Qui peut m'aider sur cette erreur?
    Par Teddy dans le forum Composants FMX
    Réponses: 0
    Dernier message: 11/04/2016, 19h20
  5. Réponses: 5
    Dernier message: 30/04/2014, 18h33

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