Voila le pb, je voudrais faire une fonction printf personnalisee. En fait je voudrais utiliser la fonction printf existante mais retraiter la chaine renvoyee par printf. Les raisons pour lesquelles j'ai besoin de cette fonction sont longues a expliquer...
Cette methode marche :
Cependant il y a une perte de temps du fait que je suis oblige de depiler puis de rempiler en odre inverse les arguments qui sont passes a ma fonction. Y a-t-il moyen d'eviter cela ???
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 int __cdecl myprintf(char *buf,char *chaine,...) { va_list pa; int i,nargs,arg,re; nargs=0; i=0; do { if(chaine[i]=='%') { ++i; if(chaine[i]!='%') ++nargs; else { if(chaine[i]==0) break; ++i; } } else ++i; }while(chaine[i]!=0); DWORD *args; args=new DWORD[nargs]; va_start(pa,chaine); for(i=0;i<nargs;++i) { args[i]=va_arg(pa,DWORD); } va_end(pa); for(i=nargs-1;i>=0;--i) { arg=args[i]; __asm { push arg }; } re=sprintf(buf,chaine); for(i=0;i<nargs;++i) __asm { pop eax }; return re; }
Partager