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

Windows Discussion :

Problème Unicode en C


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut Problème Unicode en C
    Salut a tous les programmeurs,

    ça fait quatre mois de recherche pour développez une simple application Unicode ! sans succès
    maintenant je RÊVE de développez une un jour !!

    - - -

    Mon rêve est de développez une application Unicode en langage C avec compilateur TCC (Tiny C Compiler) est juste utilise Win32 API.

    Tiny C Compiler est un compilateur qui gène un code Assembly pure x86 est il supporte lire les code source UTF-8, télécharger le ici sil-vous-plaît:
    tcc-0.9.25-win32-bin.zip

    Voila une simple application ANSI Win32 API (Fichier Code Source codé en ANSI).

    Code Source (ANSI):
    test_ansi.c

    Voila une simple application UTF-8 Win32 API (Fichier Code Source codé en UTF-8).

    Code Source (UTF-8):
    test_utf8.c

    - - -

    Comme vous avez vue, je veux afficher le mot " العربية " (ça veux dire al-arabia) mais les characters Unicode n'affiche pas correctement.

    sachez que j'ai Windows XP English SP3.
    est sachez aussi que j'ai trouver un exemple qui s'affiche correctement les characters même si langage du système dans panneau-de-configuration est English, avec l'installation du langage script complexe (Arabe, Hebrew...) mais j'arrive pas a le compile.


    Source Code:
    multilingue.c

    Binary:
    multilingue.exe


    vous pouvez me aider sil-vous-plaît ? je RÊVE de développez une un jour, sil-vous-plaît télécharger http://www.saif-technology.com/test_utf8.c et tcc-0.9.25-win32-bin.zip est essayer de développez une application Unicode.

    Est Merci a tous les programmeurs ^_^

  2. #2
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    Le problème c'est le compilateur que tu utilises, je ne crois pas qu'il supporte les fichiers sources encodés en UTF16 ou en UTF8 (il y arrive tant qu'il n'y a pas de caractères spéciaux ce qui veut dire qu'il lit de l'ANSI). Par contre le compilateur en lui même supporte la gestion des chaines unicode (le type wchar_t est défini).
    Je te conseille donc de changer de compilateur.
    Sinon tu peux écrire tes chaines dans un fichier de données externe qui serait chargé par ton programme.
    Ou bien écrire directement tes chaines de caractères en tableau d'octets à la main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <windows.h>
    
    unsigned char str[] = {
    	0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0
    };
    
    
    int main()
    {
    	MessageBoxW(0, (wchar_t*)str, L"titre", MB_OK);
    	return 0;
    }
    Mais bon c'est pas la propreté même.

    Ah oui et fais attention quand tu définis UNICODE il faut le faire avant d'inclure les en-têtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #define UNICODE
    #ifdef UNICODE
    #define _UNICODE
    #else
    #define _MBCS
    #endif
    
    #include <windows.h>
    #include <tchar.h>

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Windows en général n'est pas prévu pour UTF-8. UTF-16 est bien supporté de manière générale, mais toutes les fonctions de texte de Microsoft sont prévues pour des encodages où la taille d'un code point ne dépasse pas deux "caractères" (char, wchar_t, TCHAR). UTF-16 et les différents DBCS en font partie, mais pas UTF-8...

    Pratiquement les seules fonctions Microsoft qui supportent l'UTF-8, ce sont les fonctions de conversion: WideCharToMultiByte(), MultiByteToWideChar(), et les classes d'encodage de .Net...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    Là on en est même pas là, le compilo arrive pas à lire les sources. Il interprète l'utf8 comme de l'ANSI.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ah, je vois ce que tu veux dire.

    Et en rajoutant une BOM? Un coup d'éditeur hexa montre qu'elle est absente...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    J'avais essayé ça il fait un sympathique "unrecognized character" sur le BOM. (c'est ça qu'il fait quand il voit de l'utf16 aussi)
    Ce compilateur est pas fait pour ça c'est tout, il s'appelle "tiny C compiler" d'un autre côté

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Donc en effet, là, je ne vois plus que deux solutions:
    • Le tableau casté en wchar_t* comme dans l'exemple de Twindruff
    • Le texte en UTF-8, converti à-la-volée en UTF-16 grâce à MultiByteToWideChar().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    La! Je sais pas ou je peux trouver les mots pour exprime comment vous avez m'aider, je vous le dit tous, Monsieur Twindruff, Monsieur Médinoc, accepter mon Merci qui viens de mon cœur

    est je veux dire aussi, que vous êtes des EXPERTS dans programmation, Bravo
    Âpre quatre mois de recherche, Monsieur Twindruff et Monsieur Médinoc ma donner le code que je cherche est j'ai pas le trouver dans tous les Sites, Forums, Chat...

    - - -

    J'ai utilise Le tableau caste en wchar_t* est ca marche 100% avec compilateur TCC et GCC

    Image:


    Code:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #define UNICODE
    #ifdef UNICODE
    #define _UNICODE
    #else
    #define _MBCS
    #endif
    
    #include <windows.h>
    #include <tchar.h>
    
    unsigned char str[] = {
    	0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0
    };
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LONG StandardExtendedStyle;
    
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
    {
      MSG  msg ;    
      HWND hwnd;
      WNDCLASS wc;
    	
      wc.style         = CS_HREDRAW | CS_VREDRAW;
      wc.cbClsExtra    = 0;
      wc.cbWndExtra    = 0;
      wc.lpszClassName = L"Window";
      wc.hInstance     = hInstance;
      wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
      wc.lpszMenuName  = NULL;
      wc.lpfnWndProc   = WndProc;
      wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
      wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
      
      RegisterClass(&wc);
      hwnd = CreateWindow( wc.lpszClassName, (wchar_t*)str,
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                    100, 100, 200, 150, NULL, NULL, hInstance, NULL);  
    
      ShowWindow(hwnd, nCmdShow);
      StandardExtendedStyle = GetWindowLong(hwnd,GWL_EXSTYLE);
      SetWindowLong(hwnd, GWL_EXSTYLE,StandardExtendedStyle | WS_EX_LAYOUTRTL);
    
      UpdateWindow(hwnd);
    
      while( GetMessage(&msg, NULL, 0, 0)) {
        DispatchMessage(&msg);
      }
      return (int) msg.wParam;
    }
    
    LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
      switch(msg)  
      {
        case WM_CREATE:
    	   CreateWindow (L"button", (wchar_t*)str,    
    	   WS_VISIBLE | WS_CHILD ,
    	   50, 50, 80, 25,        
    	   hwnd, (HMENU) 1, NULL, NULL);  
    	  break;
    
        case WM_COMMAND:
    	   MessageBox(NULL, (wchar_t*)str, (wchar_t*)str, MB_OK | MB_ICONEXCLAMATION);
    	  break;
    	
        case WM_DESTROY:
          {
            PostQuitMessage(0);
            return 0;
          }
      }
      return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    La Taille:

    GCC -mwindows test.c
    => test.exe 22k

    TCC test.c
    => test.exe 3k

    c'est pour ça que j'ai vous dit que TCC gêne un code pure x86 (j'ai la lu dans un forum english)

    Alors je veux bien utilise ce compilateur (TCC) même je vais trouver du difficulté avec Le tableau caste en wchar_t*, mais vous avez bien m'aider car même si j'ai trouver vrais difficulté je peux passer a GCC

    J'ai quelque question si vous me permettre:

    * Je peux connaitre comment ta convertir le mots a en tableau d'octets ? ( Pour que je test d'autre mots )

    * Il existe une méthode pour mettre tableau d'octets directement dans une fonction ? (Par exemple même c'est pas juste MessageBoxW(0, {0x44, 0x06,...}...)

    * Vous pouvez aussi me donner un simple exemple de l'utilisation de MultiByteToWideChar() ? (J'ai déjà chercher dans google mais j'ai pas trouver un qui marche bien)

    * Est ce que #define _MBCS est obligatoire pour mon exemple ?

    * Pour que je rendre mon application RightToLeft jai ajouter code suivant, est ce que c'est une bonne idée ou j'ai fait du bugs ?

    Variable globale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LONG StandardExtendedStyle;
    Âpre ShowWindow est Avant UpdateWindow:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    StandardExtendedStyle = GetWindowLong(hwnd,GWL_EXSTYLE);
    SetWindowLong(hwnd, GWL_EXSTYLE,StandardExtendedStyle | WS_EX_LAYOUTRTL);
    * MessageBoxW et MessageBox les deux marche très bien avec TCC, mais la quelle est bien pour mon exemple ? (Application Unicode)

    A la fin, je vous dit Merci encore est encore est Bravo pour votre experiance

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    • Je ne sais pas comment Twindruff a fait exactement, mais écrire le texte dans un fichier en UTF-16 puis l'afficher avec un éditeur hexa te donnere les codes voulus.
    • Simple, c'est un peu dur. Il faudra attendre.
    • À ma connaissance, _UNICODE est rarement défini sans _MBCS. Je conseille de le mettre.
    • Je pense qu'il est plus simple de mettre directement le style WS_EX_LAYOUTRTL dans le paramètre supplémentaire de la fonction CreateWindowEx(), plutôt que de le régler après coup.
    • Je conseille de mettre spécifiquement MessageBoxW(), RegisterClassW() et CreateWindowExW() dans le cas présent.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Encore Merci Monsieur Médinoc est j'ai encore d'autre question

    * Il existe une méthode pour mettre tableau d'octets directement dans une fonction ? (Par exemple même c'est pas juste MessageBoxW(0, {0x44, 0x06,...}...)

    * Comment mettre directement le style WS_EX_LAYOUTRTL dans le paramètre supplémentaire de la fonction CreateWindowEx() ? (J'ai essayer il compile sans erreur mais fenêtre n'est pas RTL)

    * J'ai ajouter MessageBoxW(), RegisterClassW(), mais CreateWindowExW() marche pas alors j'ai mette CreateWindowW() c'est bien d'âpre vous ?

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    • Non
    • Bizarre.
    • Bizarre auss. Peux-tu poster le code avec CreateWindowExW()?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    * J'ai ajoutter WS_EX_LAYOUTRTL comme ça mais ça marche pas!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateWindowW( wc.lpszClassName, (wchar_t*)str,
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_EX_LAYOUTRTL,...
    * J'ai tester encore CreateWindowExW() et CreateWindowEx() mais ca marche pas! je get erreur suivant, est CreateWindowW() marche bien!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    36: warning: assignment makes integer from pointer without a cast
    37: warning: assignment makes pointer from integer without a cast
    38: warning: assignment makes integer from pointer without a cast
    38: warning: assignment from incompatible pointer type
    38: too few arguments to function
    Est Encore Merci Monsieur Médinoc

  13. #13
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par freesaif Voir le message
    La! Je sais pas ou je peux trouver les mots pour exprime comment vous avez m'aider, je vous le dit tous, Monsieur Twindruff, Monsieur Médinoc, accepter mon Merci qui viens de mon cœur
    De rien ça fait du bien de voir des personnes contentes
    * Il existe une méthode pour mettre tableau d'octets directement dans une fonction ? (Par exemple même c'est pas juste MessageBoxW(0, {0x44, 0x06,...}...)
    En fait oui, il y a une extension de gcc qui permet de faire ça et tcc la supporte aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBoxW(0, (wchar_t*)(char[]){0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0}, L"titre", MB_OK);
    Par contre c'est pas très courant, Visual C++ ne la supporte pas par exemple.
    Je ne sais pas comment Twindruff a fait exactement, mais écrire le texte dans un fichier en UTF-16 puis l'afficher avec un éditeur hexa te donnere les codes voulus.
    j'avais fait ça ouais, winhex a un truc sympa qui permet de copier un block de données au format source C (en gros il écrit le tableau pour nous).

  14. #14
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup Monsieur Twindruff

    J'ai encore d'autre question si vous me permettre :

    * (wchar_t*)(char[]){0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0} Marche bien pour MessageBoxW() mais ca marche pas pour CreateWindowW(), je get l'erreur suivant (TCC):

    Code:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #define UNICODE
    #ifdef UNICODE
    #define _UNICODE
    #else
    #define _MBCS
    #endif
    
    #include <windows.h>
    #include <tchar.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LONG StandardExtendedStyle;
    
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
    {
      MSG  msg ;    
      HWND hwnd;
      WNDCLASS wc;
    	
      wc.style         = CS_HREDRAW | CS_VREDRAW;
      wc.cbClsExtra    = 0;
      wc.cbWndExtra    = 0;
      wc.lpszClassName = L"Window";
      wc.hInstance     = hInstance;
      wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
      wc.lpszMenuName  = NULL;
      wc.lpfnWndProc   = WndProc;
      wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
      wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
      
      RegisterClassW(&wc);
      hwnd = CreateWindowW( wc.lpszClassName, (wchar_t*)(char[]){0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0},
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                    100, 100, 200, 150, NULL, NULL, hInstance, NULL);  
    
      ShowWindow(hwnd, nCmdShow);
      StandardExtendedStyle = GetWindowLong(hwnd,GWL_EXSTYLE);
      SetWindowLong(hwnd, GWL_EXSTYLE,StandardExtendedStyle | WS_EX_LAYOUTRTL);
    
      UpdateWindow(hwnd);
    
      while( GetMessage(&msg, NULL, 0, 0)) {
        DispatchMessage(&msg);
      }
      return (int) msg.wParam;
    }
    
    LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
      switch(msg)  
      {
        case WM_CREATE:
    	   CreateWindowW (L"button", (wchar_t*)(char[]){0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0},    
    	   WS_VISIBLE | WS_CHILD ,
    	   50, 50, 80, 25,        
    	   hwnd, (HMENU) 1, NULL, NULL);  
    	  break;
    
        case WM_COMMAND:
    	   MessageBoxW(NULL, (wchar_t*)(char[]){0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0}, (wchar_t*)(char[]){0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0}, MB_OK | MB_RTLREADING | MB_RIGHT);
    	  break;
    	
        case WM_DESTROY:
          {
            PostQuitMessage(0);
            return 0;
          }
      }
      return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    Erreur:
    32: macro 'CreateWindowW' used with too many args

    * J'ai télécharger http://www.winhex.com/winhex/, c'est la même que ta utilise ?

    Est Encore Merci Monsieur Twindruff

  15. #15
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par freesaif Voir le message
    * J'ai ajoutter WS_EX_LAYOUTRTL comme ça mais ça marche pas!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateWindowW( wc.lpszClassName, (wchar_t*)str,
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_EX_LAYOUTRTL,...
    WS_EX_LAYOUTRTL est un style étendu (EXtended) il est à utiliser dans le premier paramètre de CreateWindowEx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreateWindowExW(WS_EX_LAYOUTRTL, wc.lpszClassName, (wchar_t*)str,
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE,...

    Citation Envoyé par freesaif Voir le message
    Erreur:
    32: macro 'CreateWindowW' used with too many args
    On dirait un bug du front-end de tcc, en rajoutant des parenthèses ça passe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    hwnd = CreateWindowW( wc.lpszClassName, ((wchar_t*)(char[]){0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0}),
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                    100, 100, 200, 150, NULL, NULL, hInstance, NULL);
    Citation Envoyé par freesaif Voir le message
    * J'ai télécharger http://www.winhex.com/winhex/, c'est la même que ta utilise ?

    Est Encore Merci Monsieur Twindruff
    C'est bien ça.

    PS: tu peux nous tutoyer hein

  16. #16
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    C'est plus que quatre mois de chercher sur l'internet, aucun programmeur trouver une méthode! ca veux dire que vous avez un grande experiance en programmation, est je suis très contente de vous connaitre monsieur Twindruff

    * Pour ((wchar_t*)(char[]){0x44,...) c'est régler, Unicode avec TCC est réglé est mon rêve est devenu réale gras a vous, encore merci

    * Maintenant je vais passez a la dernier étape de mon projet, je need help juste avec convertissement des characters UNICODE a C-CODE pour le utilise dans mon application avec votre magique méthode

    - J'ai me débrouiller pour trouver vite comment convertir avec votre logicielle WinHex, Edite - Copy Block - C Source, mais est ce que je peux développez une application qui convertir ? (Avec langage VB6, VB.NET, C/C++, C#) car en générale je veux le faire automatiquement

  17. #17
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Si il impossible ou difficile juste donnez moi quelque idée de ce convertissement est moi je vais me débrouillée pour trouver un code source sur l'internet

    c'est quoi les mots cle?

    c'est du ShellCode ? ou il s'appelle Hexa-C-SOURCE ?
    How To Convert ANSI-ASCII to C-SOURCE ?

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Note: Ce doit être une extension de tcc, car ça ne compile pas du tout sous Visual C++.

    Pour la conversion, tu dois pouvoir faire un programme graphique qui fait un Dump Hexadécimal d'un texte saisi:

    Une fenêtre ou boîte de dialogue avec trois controles: Une EditBox, un bouton, une autre EditBox read-only, et puis le code qui fait le dump hexa du contenu de la première EditBox vers la seconde...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Note: Ce doit être une extension de tcc, car ça ne compile pas du tout sous Visual C++.
    C'est une extension de gcc en fait, cf mon message #13
    Citation Envoyé par Twindruff Voir le message
    En fait oui, il y a une extension de gcc qui permet de faire ça et tcc la supporte aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBoxW(0, (wchar_t*)(char[]){0x44, 0x06, 0x39, 0x06, 0x31, 0x06, 0x28, 0x06, 0x4A, 0x06, 0x29, 0x06, 0, 0}, L"titre", MB_OK);
    Par contre c'est pas très courant, Visual C++ ne la supporte pas par exemple.

  20. #20
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Et cette "extension" fait en fait partie du standard C99 ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Problème unicode / caractères spéciaux + écriture de fichier
    Par Mysti¢ dans le forum Général Python
    Réponses: 12
    Dernier message: 01/12/2010, 12h38
  2. Problème unicode avec _ungetwch() (conio)
    Par haypo dans le forum Windows
    Réponses: 1
    Dernier message: 05/04/2009, 14h24
  3. [D7] Problème UNICODE : TTntStringList
    Par Zepeq dans le forum Composants VCL
    Réponses: 0
    Dernier message: 06/03/2008, 16h19
  4. [MySQL] Problème unicode sortie BD (MySQL 5)
    Par bractar dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/05/2007, 08h34
  5. Problème unicode sortie BD
    Par bractar dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 18/05/2007, 16h20

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