CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C++ - reinterpret_cast - static_cast

techslash
techslash
Niveau 8
20 août 2002 à 01:55:50

Je vais tenter d´être bref (mais c´est une longue histoire). Il y a qq temps, j´ai posté un message ici et j´ai démontré que je connaissais rien aux pointeurs.

J´ai bossé la dessus, j´ai vu des guides sur le sujet. Je pensais avoir bien pigé... jusqu´à aujourd´hui : (

Je travaille sur un petit projet en OpenGL/GLUT (je songe à virer GLUT dans peu de temps d´ailleurs) et je désire inscrire le FPS dans la barre de titre de la fenêtre (ou dans un log txt, c´est envisageable aussi).

Je prends ces moyens détournés car je n´ai pas encore étudié une procédure qui pourrait faire apparaitre du texte "par dessus" la caméra.

Le problème est donc que, dans les deux cas, je dois écrire une variable int par le biais de fonctions (fprintf ou glutSetWindowTitle) qui demande des pointeurs de type char.

Inévitablement, j´obtiens des erreurs alors j´essais reinterpret_cast comme suggère le compileur. Il laisse passé, compile le programme et bam, erreur d´éxecution Windows.

Donc je modifie des trucs (même illogiques) et je n´arrive à aucun résultat. J´ai probablement utilisé reinterpret_cast et static_cast de toute les façons que j´ai pu imaginé pour faire passer ma variable ou le pointeur selon la situation et la tentative. Rien n´y fait.

Est-ce que quelqu´un aurait qq secondes pour, ou bien me suggérer une solution au problème, ou pour écrire une explication rapide faisant le tour des pointeurs, au cas où un truc m´aurait échappé dans la manière dont il faut les utiliser/manipuler ?

Merci bcp...

Détails supp et facultatifs.: Le problème ici n´est pas tellement d´afficher le FPS plutôt que de le faire à ma manière, j´ai déjà un guide sur le net qui offre une alternative viable mais... Bon, vu la relative simplicité de ce que j´essais de faire, j´ai visiblement un problème et je voudrais le régler :(.

GamerFou2
GamerFou2
Niveau 7
20 août 2002 à 04:16:09

Si ta fonction te demande une variable de type char * c´est qu´il lui faut une chaine de caractères certainement : ) donc pas la peine d´essayer de caster ton int en char * . .. Ce qu´il te faut c´est transformer ton int en une chaine de caractères :

char buffer[UNE_TAILLE_MAX_A_CHOISIR];
sprintf(buffer,"\%d",ta_variable_int);
et tu balances buffer à tes fonctions

voilà

LcData
LcData
Niveau 6
20 août 2002 à 14:30:54

tu devrais acheter un livre sur le C car la je pense que tu en a vraiment besoin.

Data

LcData
LcData
Niveau 6
20 août 2002 à 14:35:59

voila un chtit cadeau une fonction maison qui te permet d ecrire ou tu veux sur ta fenetre opengl

x= position en x
y= position en y
String = ton text
Font = une des valeurs suivante

GLUT_BITMAP_9_BY_15
GLUT_BITMAP_8_BY_13
GLUT_BITMAP_TIMES_ROMAN_10
GLUT_BITMAP_TIMES_ROMAN_24
GLUT_BITMAP_HELVETICA_10
GLUT_BITMAP_HELVETICA_12
GLUT_BITMAP_HELVETICA_18

void RenderBitmapString(float x, float y, void *font,std::string string)
{
const char *c;
glRasterPos2f(x, y);
for (c=string.data(); *c ! = ´\0´; c++)
{
glutBitmapCharacter(font, *c);
}
}

voila comme ca tu pouras ecrire n´importe quoi n importe ou sur ta fenetre.

data
www.ploksoftware.org

Lightness1024
Lightness1024
Niveau 10
20 août 2002 à 20:32:29

ca me parait vachement simple tout ca.
avec DirectX si on veu afficher un truc en 2D c bien plus compliké.

par contre j´amerait vous conseiller un truc, n´utilisez plus char c un truc d´unixien, utilisez TCHAR au moins vous pourrez transformer vos programme en programme gerant l´unicode !
et pour faire une chaine constante utilisez TEXT("votre chaine") ou _T("chaine")
et pensez a utiliser les bonnes fonctions a chak fois.
par exemple au lieu de strcpy utilisez _tcscpy
voila @# !

GamerFou2
GamerFou2
Niveau 7
20 août 2002 à 20:41:51

Compliqué en DirectX ? ?? Si c´est à des fins de débuggages (affiche le FPS/infos de Debug etc...) il y a cette solution qui ne me parait pas du tout compliquée : o)

HDC hdc;
HFONT AppFont; // a initialiser avec la fonte que l´on veut...

if (m_lpDDSBackBuffer->GetDC(&) == DD_OK)
{
SetBkMode(hdc, TRANSPARENT);
SelectObject(hdc, AppFont);
SetTextColor(hdc, RGB(255, 255, 0));
TextOut(hdc, _x, _y, _text, strlen(_text));
m_lpDDSBackBuffer->ReleaseDC(hdc);
}

techslash
techslash
Niveau 8
20 août 2002 à 21:26:34

Wow, mes sincères remerciements à tlm : )

"tu devrais acheter un livre sur le C car la je pense que tu en a vraiment besoin.

Data"

Je sais mais pour l´instant j´arrive à m´en sortir sans (un peu grâce à vous maintenant : ) )... C´est un investissement que je pense faire dans un futur rapproché.

Merci encore !

LcData
LcData
Niveau 6
21 août 2002 à 02:27:56

C est vrai un livre sur le c c est toujour utile il m arrive encore parfoi d eme replonger dedans quand je suis pas sur d´un truc. mais prend un bon livre evite tout ce qui est micro application et machin pour les null.

Si tu veux les references de bon ouvrage je puex te les filler

j ai bien voir des topics ou on parle enfin de prog je me sent chez moi : )

ca serait bien de faire des post avec des petits truc a la programmation

Data
www.ploksoftware.org

Lightness1024
Lightness1024
Niveau 10
21 août 2002 à 09:24:17

GamerFou2 : j´ai rien reconnu dans ce ke tu as codé, c´est quelle version de DirectX ?

Lightness1024
Lightness1024
Niveau 10
21 août 2002 à 09:25:35

non je suis sur de moi ca n´a rien a voir avec du DirectX, je comprend vraiment pas ? c koi ton bout de code ?

GamerFou2
GamerFou2
Niveau 7
21 août 2002 à 09:26:22

Bin n´importequelle version ! ! teste le tu verras bien !

Lightness1024
Lightness1024
Niveau 10
21 août 2002 à 09:27:23

t´es sur ? tu as un exemple complet a me montrer j´amerait voir comment l´inclure.

GamerFou2
GamerFou2
Niveau 7
21 août 2002 à 09:29:55

(m_lpDDSBackBuffer . .. comme tu peux t´en douter c´est une surface DirectDraw, tu peux récupérer un pointeur sur la surface depuis Direct3D aussi .
Les autres fonctions SetTextColor,SetBkMode c´est de la prog windows classique (GDI tu connais?). Le GetDC ca te permet de récupérer un handle "Device Context" de la surface.

Lightness1024
Lightness1024
Niveau 10
21 août 2002 à 09:33:12

c´est bien ce ke je pensait.
mais ya un blem: DirectDcraw ca n´existe plus !

GamerFou2
GamerFou2
Niveau 7
21 août 2002 à 09:36:26

ok un exemple (je passe tout ce qui est intialisation et gestion de l´appli ok ? . .
On est pas obligé d´initialiser le AppFont si la fonte par défaut suffit . ..

m_lpDDSBackBuffer correspond à un attribut de DisplayManager (surface backbuffer initialisée par DirectDraw ou Direct3D, peu importe la version de DirectX . ..)

void DisplayManager::PutText(long _x, long _y, xpchar *_text)
{
HDC hdc;
HFONT AppFont;

if (m_lpDDSBackBuffer->GetDC(&) == DD_OK)
{
SetBkMode(hdc, TRANSPARENT);
SelectObject(hdc, AppFont);

SetTextColor(hdc, RGB(255, 255, 0));
TextOut(hdc, _x, _y, _text, strlen(_text));
m_lpDDSBackBuffer->ReleaseDC(hdc);
}
}

Utilisation :

gDisplayManager->PutText(10,10,"Blablabla");

Lightness1024
Lightness1024
Niveau 10
21 août 2002 à 09:39:03

je suis pas sur il faudrait demander un expert du DirectX mais je suis preske certain ke ton truc n´est plus valide avec DirectX8 et ke la seule methode valable c´est la methode DrawText de l´interface ID3DXFont.

GamerFou2
GamerFou2
Niveau 7
21 août 2002 à 09:39:32

T´es sur que ca n´existe plus ? : )
DirectX est toujours compatible avec les anciennes versions (Ya toujours moyen de faire QueryInterface sur la version 7 ....)

Lightness1024
Lightness1024
Niveau 10
21 août 2002 à 09:41:07

bien sur !

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment