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

Visual C++ Discussion :

Refaire une fonction printf personnalisée


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    924
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 924
    Par défaut Refaire une fonction printf personnalisée
    Bonjour,

    Ce soir je vais commencer à développer une émulation de console de Microsoft ;
    ca je sais faire.

    Je voudrais refaire la fonction printf que je vais nommer par exemple "dwprintf" pour pouvoir plus tard afficher du texte dans ma console.
    et ca ne compile pas du tout !

    Comment fait t'on ?????
    Je joint le projet qui utilise pour le moment printf et ca ne compile pas du tout !.

    Merci

    ma fonction à moi ci-dessous qui servira plus tard pour ma console microsoft emuler ;

    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
    int __cdecl dwsprintf (
            char *string,
            const char *format,
            ...
            )
    {
     
            FILE str;
            REG1 FILE *outfile = &str;
            va_list arglist;
            REG2 int retval;
     
            _VALIDATE_RETURN( (format != NULL), EINVAL, -1);
     
    #ifdef _COUNT_
            _VALIDATE_RETURN( (count == 0) || (string != NULL), EINVAL, -1 );
    #else  /* _COUNT_ */
            _VALIDATE_RETURN( (string != NULL), EINVAL, -1 );
    #endif  /* _COUNT_ */
            va_start(arglist, format);
     
    #ifndef _COUNT_
            outfile->_cnt = MAXSTR;
    #else  /* _COUNT_ */
            if(count>INT_MAX)
            {
                /* old-style functions allow any large value to mean unbounded */
                outfile->_cnt = INT_MAX;
            }
            else
            {
                outfile->_cnt = (int)(count);
            }
    #endif  /* _COUNT_ */
            outfile->_flag = _IOWRT|_IOSTRG;
            outfile->_ptr = outfile->_base = string;
     
            retval = _output_l(outfile,format,NULL,arglist);
     
            if (string == NULL)
                return(retval);
     
    #ifndef _SWPRINTFS_ERROR_RETURN_FIX
            _putc_nolock('\0',outfile); /* no-lock version */
    		printf("%s\n",outfile->_ptr);
     
            return(retval);
    #else  /* _SWPRINTFS_ERROR_RETURN_FIX */
            if((retval >= 0) && (_putc_nolock('\0',outfile) != EOF))
                return(retval);
     
            string[0] = 0;
            return -1;
    #endif  /* _SWPRINTFS_ERROR_RETURN_FIX */
     
    }

    1>e:\source\projet\recherche\resprintf\resprintf.cpp(23) : error C2065: 'REG1' : undeclared identifier
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(23) : error C2146: syntax error : missing ';' before identifier 'FILE'
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(23) : error C2065: 'outfile' : undeclared identifier
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(23) : error C2275: 'FILE' : illegal use of this type as an expression
    1> l:\program files (x86)\microsoft visual studio 8\vc\include\stdio.h(69) : see declaration of 'FILE'
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(25) : error C2065: 'REG2' : undeclared identifier
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(25) : error C2144: syntax error : 'int' should be preceded by ';'
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(27) : error C2065: 'EINVAL' : undeclared identifier
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(27) : error C3861: '_VALIDATE_RETURN': identifier not found
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(32) : error C3861: '_VALIDATE_RETURN': identifier not found
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(37) : error C2227: left of '->_cnt' must point to class/struct/union/generic type
    1> type is ''unknown-type''
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(37) : error C2065: 'MAXSTR' : undeclared identifier
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(49) : error C2227: left of '->_flag' must point to class/struct/union/generic type
    1> type is ''unknown-type''
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(50) : error C2227: left of '->_ptr' must point to class/struct/union/generic type
    1> type is ''unknown-type''
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(50) : error C2227: left of '->_base' must point to class/struct/union/generic type
    1> type is ''unknown-type''
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(52) : error C3861: '_output_l': identifier not found
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(58) : error C2227: left of '->_cnt' must point to class/struct/union/generic type
    1> type is ''unknown-type''
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(58) : error C2227: left of '->_ptr' must point to class/struct/union/generic type
    1> type is ''unknown-type''
    1>e:\source\projet\recherche\resprintf\resprintf.cpp(59) : error C2227: left of '->_ptr' must point to class/struct/union/generic type
    1> type is ''unknown-type''

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 468
    Par défaut
    Tout est dans les messages d'erreurs du compilateur
    RTFM.

    error C2065: 'REG1' : undeclared identifier
    Bin oui, c'est quoi ce REG1 ?

    Vos #ifdef sont vraiment pas élégant, pensez aux MACRO.

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    924
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 924
    Par défaut
    J'ai recopier du code source de Microsoft "sprintf.c".

    Le but je voudrais une fonction équivalent à printf , pour afficher non pas dans la console de microsoft mais dans ma console virtuelle à moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void myprintf(char *format,...)
    {
    char result[1024]; // or char *result;
    ....
    //result= ???
    ....
    for (int i = 0 ; i < strlen (result);i++)
    SendMessage(hConsole,WM_PUTCHAR,0,(LPARAM)result[i]);
    }

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 468
    Par défaut
    Je ne vais pas débattre de l'utilité toute relative de votre console.
    Moi, je suis un fainéant, donc je récupère le travail des autres et pour une utilisation précise, il existe toujours des solutions bien plus adaptée.

    Il peut être fait par M$, c'est un code comme les autres, il ne vient pas d'une technologie extraterrestres.

    Donc tout .c utilise des .h et les "identifiers" doivent être déclarés avent d'être utilisé.

    Donc prenez au moins la peine de comprendre le code qui vous copiez.

    Si vous êtes pommé avec des define, pensez à l'option de compilation /P du compilateur.
    http://msdn.microsoft.com/en-us/libr...v=vs.100).aspx

    P.S.: Il n'y a que du mauvais code qui se copie-colle, que cela soit intrinsèque au code, qui n'est pas utilisable autrement (ce n'est pas le cas ici), ou parce qu’il est utilisé par une personne qui ne cherche pas à le comprendre et à l'assimiler ( ).

Discussions similaires

  1. Modification d'une fonction : printf d'un tableau
    Par sloshy dans le forum Langage
    Réponses: 6
    Dernier message: 15/01/2010, 19h38
  2. [1.x] Hydratation personnalisée par une fonction générique
    Par daajack dans le forum Symfony
    Réponses: 2
    Dernier message: 10/12/2007, 10h50
  3. #Erreur dans une requête avec une fonction personnalisée
    Par pguiheu dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 04/07/2006, 15h45
  4. Réponses: 3
    Dernier message: 21/02/2006, 18h05
  5. Réponses: 4
    Dernier message: 08/02/2006, 08h31

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