Bonjour,
J'ai développé une application sous XE2 et Seven ultimate 64.
Lorsque je mets l'exe en mode de compatibilité XP SP3, un message m'indique "Indice hors limite (0)" inexistant sans ce mode.
Pourriez vous m'apporter votre aide?
Merci
Pierre
Bonjour,
J'ai développé une application sous XE2 et Seven ultimate 64.
Lorsque je mets l'exe en mode de compatibilité XP SP3, un message m'indique "Indice hors limite (0)" inexistant sans ce mode.
Pourriez vous m'apporter votre aide?
Merci
Pierre
Essaie de déterminer à quel endroit du code cela se produit.
Trace les endroits où tu fais appel à des indices.
Là il n'y a pas de possibilité de t'aider sans informations supplémentaires
Delphi 7/XE2/XE3
C#
Oracle 9i à 12c
SQL Server 2008 à 2014
Merci de ta réponse.
En fait, il serait plus simple de poser ma question sous une autre forme.
J'ai compilé une appli avec delphi Xe2.
Je l'ai envoyée à un testeur qui est Tawanais.
Je suis sous W7 64 mais compile en 32 bits.
Lui est en W7 64.
Il rencontre cette erreur que je ne peux reproduire qu'en mode de comptabilité XP SP3.
Je soupçonne un problème d'unicode mais ne sais pas comme gérer cela
Merci de ton aide
Pierre
Bonjour,
Un problème d'indice renvoi vers une structure de tableau ou de liste, cherche par là. Utilise-tu la liste des paramètres passés par windows a ton application ?
@++
Dany
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
Bonjour Dany
De quels paramètres s'agit-il?
Si cela peut avoir une quelconque utilité, Si je passe en affichage Windows classic, j'ai la même erreur, avec l'affichage Windows 7 basic, tout fonctionne bien chez moi.
Amicalement
Pierre
Merci de la réponse,
J'utilise de nombreux TStringList qui sont remplis à partir de fichier textes contenant des données séparées par des virgules, mais pas de données sytème.
Pas de solution en vue.
Amicalement
Pierre
Bonjour,
Je pense savoir d’où provient l'erreur.
En fait j'utilise des fichiers texte comme des fichiers INI.
Leur contenu est structuré comme suit.
Curieusement sans mode de compatibilité, cela fonctionne sans problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 [CODEF4] 100,400,325,275,200 200,1190,1100,1000,990 300,1900,1750,1650,1550 400,2750,2500,2350,2250 500,3500,3250,3100,2950 600,4300,4000,3850,3650 700,5250,4900,4700,4400 800,6200,5600,5300,5200 [CODET1] 100,900 200,1000 300,1100 400,1200 500,1300 600,1400 700,1500 800,1600 900,1700 1000,1800 [CODET2] 900,600 1000,700 1100,800 1200,900 1300,1000 1400,1100 1500,1200 1600,1300 1700,1400 1800,1500
Par contre en mode de compatibilité ou en mode affichage Windows basic,
Les sections ne sont plus reconnues donc, plus lues.
Comment utiliser la structure de mes fichiers sans la changer mais en les traitant comme fichier texte et non comme fichier INI.
Merci de vos lumières
Amicalement
Pierre
Ton exemple de fichier ne correspond pas vraiment à un fichier de type .ini :
[SECTION_N]
key1=value1
...
keyX=valueX
Pour mieux comprendre ce qu'il se passe il faudrait voir le code de lecture de ton fichier texte et de remplissage des TStringList, sinon pour la lecture de fichier texte regardes AssignFile, Reset, ReadLn, CloseFile
Si l'erreur "Indice hors limite (0)" intervient sur une des StringList cela voudrait dire qu'elle est vide; peut-être un test sur la propriété Count avant tout appel du genre MyStringList[i] te permettrait de situer le problème (comme le dit Linkin le mieux serait de tracer au niveaux de ces appels ou d'encapsuler les appels avec des try...except).
Une idée, mais peut-être ça n'a rien à voir, le changement de mode ne modifie-t-il pas ton séparateur de valeur à la lecture du fichier; avec des fichiers .ini et sur des machines de différents pays j'ai déjà eu des soucis à cause de DecimalSeparator qui selon les pays est ',' ou '.'
Merci de ta réponse:
Voici comment je lis les fichiers:
Cette section contient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 With TMemIniFile.Create('FuelProfile.txt') do begin ReadSectionValues('LEST9',aList); Free;
Toutes les autre sections sont bien lues quelque soit le mode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 [LEST9] 53.5,0,0,0,0,0,0,0,0,0,0 53.6,210,210,220,220,220,220,230,230,240,250 53.7,420,430,430,440,440,450,460,470,480,490 53.8,630,640,650,660,660,670,690,700,720,740 53.9,840,850,860,870,890,900,920,940,960,980 54.0,1050,1070,1080,1090,1110,1120,1150,1170,1200,1230 54.1,1260,1280,1300,1310,1330,1340,1380,1410,1440,1480 54.2,1470,1490,1510,1530,1550,1570,1610,1640,1680,1720 54.3,1680,1700,1730,1750,1770,1790,1840,1880,1920,1970 54.4,1890,1920,1940,1970,1990,2020,2070,2110,2160,2210 54.5,2100,2130,2160,2190,2210,2240,2300,2350,2400,2460 54.6,2310,2340,2370,2400,2430,2460,2520,2580,2640,2700 54.7,2520,2560,2590,2620,2660,2690,2750,2820,2890,2950 54.8,2730,2770,2810,2840,2880,2910,2980,3050,3130,3200 54.9,2950,2980,3020,3060,3100,3140,3210,3290,3370,3440 55.0,3160,3200,3240,3280,3320,3360,3440,3520,3610,3690
Je pense que cela provient du fait que la première chaine contient un séparateur décimal '.'.
Il est bien lu en mode W7 mais pas en mode Windows classic ni en compatibilité XP SP2.
Que puis faire s'il vous plait?
Cordialement
Pierre
Avant le ReadSectionValues tu peux ajouter un test sur le séparateur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if ( DecimalSeparator <> '.' ) then DecimalSeparator:= '.';
Merci,
Je teste et reviens vers vous.
Cordialement
Pierre
Bonsoir,
Pas de changement avec ta proposition.
Une autre idée?
Comme seules deux sections posent problème sur un trentaine, peut-être puis-je les placer dans de vrais fichiers texte..?
Cordialement
Pierre
Je m'en doutais un peu, ce genre d'erreur aurait pu arriver avec un ReadFloat mais pas avec ReadSectionValues.Pas de changement avec ta proposition.
As-tu vérifié ce qu'il y avait dans aList dans les différents mode après ReadSectionValues('LEST9',aList); genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 With TMemIniFile.Create('FuelProfile.txt') do begin ReadSectionValues('LEST9',aList); Showmessage(aList.Text); Free;
En effet, dans le mode avec erreur, la liste est vide.
Pierre
Salut,
Juste une petite question avant une proposition.
Sur ton poste en W7 64 qui fonctionne, peux-tu changer tes paramètres régionaux : si tu as un . pour le séprateur de décimale met une virgule et vice et versa, ensuite refais un test.
Bonjour,
J'ai testé ce conseil et le programme fonctionne quelque soit le séparateur régional.
Cordialement
Pierre
Bonjour,
Je suis en train de convertir les section du fichier *.ini en autant de fichiers *.txt.
Je pense que cela devrait marcher.
Je reviens vous conter mes résultats
Cordialement
Pierre
Re bonjour,
Je reviens vous remercier chaleureusement pour vos précieux conseils et le temps que avez bien voulu consacrer à mon problème.
Après avoir converti toutes les section (53) en fichiers textes individuels et utilisésur chacun d'entre eux.aList.LoadFormFile
Tout fonctionne dans tous les modes.
Il ne me reste plus qu'à envoyer l'appli à jour à mon testeur Tawanais pour vérifier que ça fonctionne aussi chez lui.
Encore merci
(Je mets la balise RESOLU)
Très Cordialement
Pierre
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager