JMC70
Messages postés77Date d'inscriptionsamedi 9 novembre 2002StatutMembreDernière intervention 6 juillet 2014
-
5 déc. 2009 à 14:58
JMC70
Messages postés77Date d'inscriptionsamedi 9 novembre 2002StatutMembreDernière intervention 6 juillet 2014
-
6 déc. 2009 à 09:38
Un de mes programmes plantait sur les versions allemande, espagnole et italienne de Windows (mais peut-être depuis d'autres versions étrangères), mais pas sur la version française (je ne l'avais donc pas décelé lors des tests alors qu'il y avait effectivement une erreur). Pour simplifier :
Private Sub Form_Load()
[b]Dim b$
b$ = "Coucou"
MsgBox LCase(b$ = "coucou")/b End Sub
Si on lance le programme depuis un Windows français, on obtient "faux" (normal, il aurait fallu écrire : Msgbox LCase(b$) = "coucou" (la fatigue des longues heures de programmation !)
Depuis un Windows "étranger" on obtient une erreur 13 (type mismatch).
Rien de bien grave quand on trouve la raison du plantage (qui m'a d'ailleurs permis de déceler une erreur dans le programme - en réalité la comparaison était placée dans un test) mais si quelqu'un a une explication, ça m'intéresserait bien.
JMC70
A voir également:
Erreur décelée uniquement sur les Windows non français
JMC70
Messages postés77Date d'inscriptionsamedi 9 novembre 2002StatutMembreDernière intervention 6 juillet 2014 6 déc. 2009 à 09:38
slt. Oui, tout à fait d'accord. Ici VB6 est trop permissif. Cette faute de frappe est passée inaperçue car elle était située dans un test de trois lignes censé rendre très rarement "vrai" et tellement simple qu'on ne prend même pas le temps de le tester.
J'aurais bien aimé qu'un essai soit fait depuis un autre pays pour confirmer mais je vais clore la discussion ici. C'était simplement une mise en garde que je voulais faire sur un point de détail du langage (mais qui peut avoir son importance quand on débogue un programme).
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 déc. 2009 à 15:16
BONJOUR aussi
En effet, c'est étonnant.
Est-ce que la langue du VB6 était la même que l'OS ?
ou bien as-tu utilisé les RunTime FR sur un OS étranger ?
Avec un OS en anglais et un VB6 en anglais aussi, pas de soucis : renvoie True/False.
Avec un OS en anglais et un VB6 en français aussi, pas de soucis : renvoie Vrai/Faux.
D'après les traducteurs automatiques, Vrai/Faux se disent True/False en allemand et italien. Donc ce n'est pas un problème de page de code (genre caractères spéciaux).
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
JMC70
Messages postés77Date d'inscriptionsamedi 9 novembre 2002StatutMembreDernière intervention 6 juillet 2014 5 déc. 2009 à 16:05
C'est ce que je soupçonnais au départ : j'utilisais un compilateur en anglais pour éviter de fournir la Vb6fr.dll ; j'ai donc recompilé avec le compilateur français en fournissant la dll (avec l'install correspondant) sans changement.
A noter que ça ne semble pas se produire dans tous les pays. Le logiciel a été envoyé aux USA dans la même période et on ne m'a pas signalé de problème.
Les Windows des différents pays doivent avoir des petites différences et puisque les run-time VB6 (sauf VB6fr) sont incorporés à Windows depuis XP, ceux qu'on fournit avec les programmes d'installation ne sont pas pris en compte. A mon avis la différence vient certainement d'un de ces run-time (msvbm60.dll ?) mais je peux me tromper.
Ce qui serait vraiment probant, c'est que quelqu'un puisse essayer avec un compilateur allemand par exemple.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 5 déc. 2009 à 18:03
Salut,
peu importe le réel problème de "çà marche sous telle ou telle langue"...
MsgBox LCase(b$ = "coucou")
lcase attend une string, tu lui envoies un boolean (-1 0 1)
que vbFR accepte sans erreur et renvoie "TRUE" ou "FALSE" parce que trop permissif, on essaye de toujours donner le type attendu, et ici l'erreur semble légitime, du coup!