Erreur décelée uniquement sur les Windows non français

Résolu
JMC70 Messages postés 77 Date d'inscription samedi 9 novembre 2002 Statut Membre Dernière intervention 6 juillet 2014 - 5 déc. 2009 à 14:58
JMC70 Messages postés 77 Date d'inscription samedi 9 novembre 2002 Statut Membre Derniè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

4 réponses

JMC70 Messages postés 77 Date d'inscription samedi 9 novembre 2002 Statut Membre Derniè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).


JMC70
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
JMC70 Messages postés 77 Date d'inscription samedi 9 novembre 2002 Statut Membre Derniè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.

JMC70
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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!

MsgBox LCase$(cstr(b$ = "coucou"))

++

[hr]
0
Rejoignez-nous