Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

1

01.04.2007, 20:01

Laden einer BMP- Datei

Hallo miteinander.

Ich arbeite gerade ein Tutorial zu OpenGL durch.
Genauer gesagt bin ich hier:
http://www.codeworx.org/opengl_tut6.php
Nun habe ich ein Problem mit der Funktion :

C-/C++-Quelltext

1
AUX_RGBImageRec *LoadBMP(char *Filename) // Lädt ein BMP


oder hier der ganze Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AUX_RGBImageRec *LoadBMP(char *Filename) // Lädt ein BMP

{
  FILE *File=NULL; // Das File Handle  

  if (!Filename)   // Ist ein Dateiname übergeben worden?

  {    
     return NULL; // offenbar nicht... Abbruch  

  }

  File=fopen(Filename,"r");   // Versuch die Datei zu öffnen

  if (File) // Existiert die Datei?  

{    
fclose(File); // Datei schließen    

return auxDIBImageLoad(Filename);     // BMP laden und Zeiger (Pointer) zurückgeben, 

    // der auf die Bilddaten verweist  

}  
return NULL; // Laden hat nicht geklappt

}


Nun, das Problem ist, dass fopen ein char* verlangt, auxDIBImageLoad(Filename) aber LPCWSTR.
Und das gibt mir einen Compiler Fehler. Jetzt weiss ich nicht, was ich machen kann, um das zu beheben.

Der Code ist genau so im Tutorial abgedruckt.
Ich hoffe, ihr könnt mir helfen.

Lg Drakon

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

01.04.2007, 22:24

Nimm als Parametertyp statt const char* const wchar_t* oder konvertier deinen C-String z.B. mit MultiByteToWideChar.

grüße
@D13_Dreinig

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

3

01.04.2007, 22:53

oder benutze generische datentypen. char* -> TCHAR* und schreibe ein #define UNICODE wenn auxDIBImageLoad() wchar_t* erwartet. sollte auch funktionieren.
btw, ich habe auch schon texturen mit glaux geladen und die funktion hat char* erwartet ^^

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

4

02.04.2007, 11:34

[geloescht] hat nur verwirrt^^
"Have you tried turning it off and on again?"

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

5

02.04.2007, 15:15

mit dem UNICODE symbol wird TCHAR zu wchar_t. wo ist dein problem?

6

02.04.2007, 16:43

Zitat von »"Chase"«

Entweder ich hab nicht verstanden was Präprozessoranweisungen sind, oder das wird tatsächlich nicht funktionieren -.-
Eine Funktion braucht Wide-char, die andere Multi-Byte - da hilft ein generischer Datentyp wenig


Zitat von »"ChrisJ"«

mit dem UNICODE symbol wird TCHAR zu wchar_t. wo ist dein problem?

Er wollte wohl sagen das die Funktion immer den selben Datentyp erwartet und wenn das falsche Flag gesetzt ist, wird der falsche Datentyp verwendet.

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

7

02.04.2007, 17:41

Ja, was ich meine ist: TCHAR kann nur entweder ein wchar_t oder ein char sein; drakon ist aber in der Situation dass die OpenGL Funktion Unicode erwartet, die cstdlib aber ascii. Es wird wahrscheinlich keine schlechte Idee sein auf eine WinAPI-Alternative fuer fopen zurueck zu greifen.
"Have you tried turning it off and on again?"

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

8

02.04.2007, 22:38

wfopen oder _tfopen oder so ähnlich müsste es gehen^^

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

9

02.04.2007, 23:37

auxDIBImageLoad() ist keine opengl funktion. und bei mir aktzepiert sie char* ^^

Werbeanzeige