Bonsoir,
Je vous dis tout de suite, je suis fatigué, et je n'ai plus l'esprit très clair...
Voici mon soucis: j'ai fait une librairie qui inclut la structure suivante...
Ce qui est assez étonnant c'est que la valeur de "bold" est toujours 0, que je mette true ou 1 :{
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 struct s_RGB { unsigned short Red; unsigned short Green; unsigned short Blue; bool bold; unsigned short alpha; // facilite la gestion de la transparence en SDL2 };
...dans un programme je fais ceci:
...cette fonction est appelée dans une librairie comme ceci:
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 void ShowMe(void *ItsMe) { t_Ennemy *tmp=(t_Ennemy*)ItsMe; switch(tmp->Defeats) { case 2: setForegroundColor((struct s_RGB){170,255,0,true,0}); break; case 3: setForegroundColor((struct s_RGB){85,255,255,true,0}); break; case 4: setForegroundColor((struct s_RGB){255,255,0,true,0}); break; case 5: setForegroundColor((struct s_RGB){255,151,82,true,0}); break; case 6: setForegroundColor((struct s_RGB){235,133,49,true,0}); break; default: setForegroundColor((struct s_RGB){255,255,255,false,0}); break; } wprintf(L"\t%s [%02d]\n",tmp->pName,tmp->Defeats); setForegroundColor((struct s_RGB){255,255,255,false,0}); }
...dans mon programme je mets tout en place ici...
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 void lc_showList(ListeChainee *pListe) { if(pListe==NULL) return; if(pListe->pHead!=NULL) { lc_Datas *lc_parcours=pListe->pHead; while(lc_parcours!=NULL) { if(lc_parcours->pDisplay!=NULL) lc_parcours->pDisplay(lc_parcours->value); lc_parcours=lc_parcours->pNext; fflush(stdout); } } }
... lc_setDisplayByID() est la fonction qui permet de spécifier quelle sera la fonction pour afficher l'élément de la liste chaînée si besoin est...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if(found==-1) { unsigned short us_ID=lc_insert((void*)Ennemi,ll_Ennemis,cssmuserdef,sizeof(t_Ennemy)); lc_setDisplayByID(ll_Ennemis,us_ID,ShowMe); }
Dans la librairie j'ai placé des instructions de "debug"...
...et aussi...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void setForegroundColor(struct s_RGB color) { wprintf(L"[%s] DEBUG --> %d;%d;%d %d (%d)\n",__func__,color.Red,color.Green,color.Blue,color.bold,color.alpha); char *couleurAvantPlan=getRGBString(color); wprintf(L"%s",couleurAvantPlan); free(couleurAvantPlan); }
...quand j'exécute mon programme j'ai TOUJOURS 0 dans le champs "bold" :{
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 char* getRGBString(struct s_RGB target) { wprintf(L"\n[DEBUG] %d;%d;%d %d (%d)\n",target.Red,target.Green,target.Blue,target.bold,target.alpha); char *pTmp=(char*)malloc(sizeof(char)*25); // \x1b[38;2;74;213;237;1m memset(pTmp,0,25); sprintf(pTmp,"\x1b[38;2;%d;%d;%d%sm",target.Red,target.Green,target.Blue,target.bold?";1":""); return pTmp; }
J'ai fait un petit programme de test qui n'utilise pas la librairie...
...là ça fonctionne, bold a une valeur à 1 (true)...
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 #include <stdio.h> #include <stdbool.h> struct s_RGB { short R; short G; short B; bool bold; short alpha; }; void testRGB(struct s_RGB); void main(void) // PAS ANSI mais je m'en fous { struct s_RGB test=(struct s_RGB){170,255,0,true,0}; printf("%d,%d,%d %d (%d)\n",test.R,test.G,test.B,test.bold,test.alpha); testRGB((struct s_RGB){170,255,0,true,0}); } void testRGB(struct s_RGB target) { printf("%s %d,%d,%d %d (%d)\n",__func__,target.R,target.G,target.B,target.bold,target.alpha); }
Le même programme avec la librairie donne 1 au champs "bold" :]
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 #include <stdio.h> #include <uep_wide.h> void testRGB(struct s_RGB); void main(void) { struct s_RGB test=(struct s_RGB){170,255,0,true,0}; printf("%d,%d,%d %d (%d)\n",test.Red,test.Green,test.Blue,test.bold,test.alpha); testRGB((struct s_RGB){170,255,0,true,0}); } void testRGB(struct s_RGB target) { printf("%s %d,%d,%d %d (%d)\n",__func__,target.Red,target.Green,target.Blue,target.bold,target.alpha); }sirius:/exemples/structures # gcc debugRGBwithuepwide.c `pkg-config uepwide --cflags` `pkg-config uepwide --libs` -o debugRGBwithuepwide
sirius:/exemples/structures # ./debugRGBwithuepwide
170,255,0 1 (0)
testRGB 170,255,0 1 (0)
sirius:/exemples/structures #
Qu'est-ce que j'ai mal fait dans mon programme alors ???
Je sais pas super bien utiliser gdb avec un programme qui prends des paramètres en ligne de commande sinon je ferais bien un "watch" pour voir si -- comme par hasard -- je ne me taperais pas une saloperie d'effet de bord...
[edit added png]
[edit]
Là je sais pas...
Partager