Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Erreur bizarre : MessageBox affiche du texte en japonais [ Divers / Débutant(e) ] (epineurien)

mardi 22 avril 2008 à 09:14:16 | Erreur bizarre : MessageBox affiche du texte en japonais

epineurien

Bonjour à tous !

J'ai quelques problêmes avec visual studio C++. Quand j'utilise une MessageBox le texte apparait ... en japonais. J'ai désactivé le support de ces caractères et à la place j'obtiens ... des carrés. Là je comprend pas, parceque mes pointeurs sont bon ; si je fais varier la longeur de mes chaines, ca varie aussi dans la messagebox.

Petit détail , au lieu de lire les caractères comme faisant 1 octect (ASCII normal) l'api semble les lire par deux (chaine de 6 caractères en fait 3jap. et elle ne reconnait le zéro terminal que si il fait 2octet).

Si quelqu'un à une idée, parceque ca me faisait pas ça avec masm32...

Merci d'avance !

Voilà le code :

    char ClasseFenetre[8]="BUTTON";      //chaine au hazard
    char HgTitreFenetre[27]="Session Hydrargyrum 0.20a";
    OffsetClasse=&HgClasseFenetre[0];
    OffsetTitre=&HgTitreFenetre[0];
 __asm {
    mov eax,0
    mov ebx,OffsetClasse
    mov ecx,OffsetTitre
    mov edx,MB_YESNO+MB_ICONEXCLAMATION
    push edx
    push ecx
    push ebx
    push eax
    call DWORD PTR MessageBox
    }
Franchement je voit pas d'où ça peut venir ...


Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
http://hydrargyrum.ifrance.com.

mardi 22 avril 2008 à 10:27:10 | Re : Erreur bizarre : MessageBox affiche du texte en japonais

BruNews

Administrateur CodeS-SourceS

char ClasseFenetre[]= "BUTTON";
char HgTitreFenetre[]= "Session Hydrargyrum 0.20a";

Ces 2 chaines en haut de module, segment .data mis par le compilo.

Fonction FULL ASM ou FULL C mais jamais de mixage !!!
__declspec(naked) void __stdcall bnMsgbox()
{
  __asm {
    push   0
    push   offset HgTitreFenetre
    push   offset ClasseFenetre
    push   0
    call   dword ptr MessageBox
    ret    0
  }
}

ciao...
BruNews, MVP VC++


mardi 22 avril 2008 à 13:07:35 | Re : Erreur bizarre : MessageBox affiche du texte en japonais

epineurien

Tient je me demandait aussi comment on faisait pour faire autre chose que des variables locales(sur la pile) en C, j'avais pas pensé à simplement les mettres hors d'une fonction.
Note : il s'agit pas d'une fonction , le code que j'ai mis est dans le corps de 'main'. 

J'arrive pas à déclarer ta fonction (enfin, le linker ne la trouve pas). Je la met avant 'main' et je met 'DWORD __stdcall bnMsgBox();' dans l'entête,  pourtant j'ai quand même 'error LNK2001: symbole externe non résolu _bnMsgBox@0'.

J'ai remplacer par tes instructions (chaine dans l'entete,...) mais ca donne toujours du jap. (enfin, des cubes là). Mais c'est pas normal, peut importe ce qu'on passe comme argument, la fonction est sensé recevoir une chaine qu'elle interprête comme de l'ASCII, hors y a pas de caractère asiatique dans ce format, donc comment elle fait ???

Rah, c'était tellement plus simple avec du pur asm. Qu'est-ce qui faut pas faire pour avoir accés à 4 pauvres instructions en plus ...


Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
http://hydrargyrum.ifrance.com.

mardi 22 avril 2008 à 13:26:10 | Re : Erreur bizarre : MessageBox affiche du texte en japonais

BruNews

Administrateur CodeS-SourceS
C'est du PUR ASM !!!
faut juste bien comprendre ce qui se passe.

quand tu mets:
char ClasseFenetre[8]="BUTTON";
dans une fonction, les octets "BUTTON" sont bien placés par le compilo dans le segment .data, idem si on l'avait fait à la main dans MASM.


ciao...
BruNews, MVP VC++

mardi 22 avril 2008 à 13:39:24 | Re : Erreur bizarre : MessageBox affiche du texte en japonais

epineurien

Ah ?
Etrange , parceque le compilateur me refuse toute commande 'offset Variable', si 'Variable' est dans le corps d'une fonction (pas de problêmes maintenant que je les ais mises en dehors), avec 'lea eax,variable' ca fonctionne par contre.
Ca ressemblait au problême de MASM qui refuse la commande 'offset' sur une variable locale : celle-ci est dans la pile et non dans le segment de data.
Je me suis donc dit que les variables déclaré hors de l'entête en C sont elles aussi des variables locales.

Et pour ce qui ce qui est de savoir comment une fonction qui est sensée interprété de l'ASCII se met à faire ... autre chose ? Et pour la déclaration de fonction ? J'ai été voir tes autres codes sources (a force de poser des questions et que ce soit toujours toi qui réponde je commence à avoir un gros dossier 'Code BruNews' sur mon disque ), mais je voit pas où j'ai m... dans la déclaration (c'est décidé ce soir j'achète C++ pour les nuls en rentrant).


Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
http://hydrargyrum.ifrance.com.

mardi 22 avril 2008 à 13:50:18 | Re : Erreur bizarre : MessageBox affiche du texte en japonais

BruNews

Administrateur CodeS-SourceS
C'est clair, offset est calcul (debSegment - posSegment) donc ce qui est sur stack ne peut pas fonctionner ainsi mais en décalage de ESP.

ciao...
BruNews, MVP VC++

mardi 22 avril 2008 à 19:10:51 | Re : Erreur bizarre : MessageBox affiche du texte en japonais

epineurien

Bon finalement j'ai pas eu besoin du bouquin.
J'ai définit ta fonction, je la lance et .... Japonais .
Donc ça vient pas du code.
Y a un réglage 'forcer l'affichage de caractère bizarre' dans les options de VSC++, des fois que je l'aurais coché par erreur ?


Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
http://hydrargyrum.ifrance.com.

mercredi 23 avril 2008 à 13:12:46 | Re : Erreur bizarre : MessageBox affiche du texte en japonais

epineurien

Personne n'a de solution ?
Parceque tant que j'arrive pas à afficher correctement une simple msgBox, c'est même pas la peine d'essayer les autre API.


Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
http://hydrargyrum.ifrance.com.

mercredi 23 avril 2008 à 13:27:06 | Re : Erreur bizarre : MessageBox affiche du texte en japonais

BruNews

Administrateur CodeS-SourceS
Mets un lien sur ton projet VS, je regarderai ce soir en rentrant.

ciao...
BruNews, MVP VC++

mercredi 23 avril 2008 à 17:25:03 | Re : Erreur bizarre : MessageBox affiche du texte en japonais

epineurien

C'est fait :
http://hydrargyrum.ifrance.com/telechargement/Demonstration.rar.txt
Il faudra enlever le '.txt' aprés le téléchargement (un problême avec l'hébergeur).
Merci de ton acharnement à m'aider.


Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons : 
http://hydrargyrum.ifrance.com.


1 2

Cette discussion est classé dans : texte, mov, messagebox, push, japonais


Répondre à ce message

Sujets en rapport avec ce message

Ancien code - CreateWindowEx ne fonctionne pas [ par TehWan ] Je ne comprends vraiment pas pourquoi CreateWindowEx ne fonctionne pas. Je code en ancien code avec MASM32. J'ai même essayé la nouvelle syntaxe (invo masm32 [ par kiki127 ] je n'arrive pas à compiler ce petit prog avec masm.pourriez vous m'indiquer la marche a suivre.merci d'avanceprog segmentorg 100hassume cs:progstart:c probleme affichage cadre [ par jo_benni ] Salut à tous, voilà je débute en assembleur et j'ai fait un petit programme exe qui affiche une succession de cadre de plus en plus grand. Le probleme Quels sont les parametres (nombre, taille...) [ par Renfield ] Bonjour,on peut appeler RunDll32 pour executer des fonctions contenues dans des dll...j'aimerais m'affranchir de cette étape, mais j'ai pour cela beso boot secteur [ par henri12 ] salutje viens de decompiler le boot secteur d une disquette de demarrageje voudrais savoir ou puis je mettre 15 octet de code que je veux faire execut BeginPaint code débutant [ par TRAX44 ] Bonjour, le problème est tout simple je comprends absolument pas ce qui marche pas. Le "programme" est censé créer une fenêtre est afficher du texte e Messagebox (niveau débutant) [ par Ulala2 ] Bonjour,je suis en train de créer une dll que je vais invoquer en vb6.Tout marche très bien, sauf pour la fonction messagebox dont n'arrive pas à récu Probléme d'Affichage pour les chaines de caractères [ par HwW_Mb ] Salut les petits :-)A L'AIDE !!!!!!!!!!!!!j'ai programmé un Mini Os avec un secteur de démarrage et un noyau de 5 secteursmais je n'arrive pas à affic conversion minuscule [ par safwensafwen ] C'est unprogramme qui fair la conversion en minuscule en utilisant la pile je n'arriv LecteurEstDvd asm inline [ par AlexMAN ] Bonjour, Voila j'ai un ptit pb au nivo, je pense, de l'appel de la fonction DeviceIoControl, le code : //Fonction Cint __stdcall LecteurEstDvd(char *p


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.