[Erledigt]D3DXLoadSurfaceFromFile Problem mit 4. Parameter
-
Hi,
ich schlage mich seit einiger Zeit mit der DX9 Programmierung rum, und bin auch schon einige male angeeckt, aber bisher noch nie auf so einen komischen Fehler gestoßen. Das heißt, eigentlich ist der Fehler eindeutig, allerdings für mich nicht ersichtlich, was der Compiler jetzt genau von mir will
letztendlich versuche ich oben genannte Funktion aufzurufen und zwar so:
D3DXLoadSurfaceFromFile(m_lpSurface, // Oberflaeche in die die Grafik geladen werden soll NULL, // Palette NULL, // Zielrechteck "blubb.bmp", // Dateiname der Grafik NULL, // Quellrechteck D3DX_FILTER_NONE, // Filter NULL, // Colorkey NULL);
sollte eigentlich recht geläufig sein (blubb.bmp ist hier einfach mal nur ein teststring). ich habe diese funktion praktisch genauso aus meinem beispielcode herauskopiert, allerdings mit einem unterschied:
// Dateiname der zu ladenden Grafik const char* FILE_NAME = "../../media/fighter_top.png"; ..... .... D3DXLoadSurfaceFromFile(m_lpSurface, // Oberflaeche in die die Grafik geladen werden soll NULL, // Palette NULL, // Zielrechteck FILE_NAME, // Dateiname der Grafik NULL, // Quellrechteck D3DX_FILTER_NONE, // Filter 0, // Colorkey NULL);
so, ok, klar das beispiel hat einen pointer, aber auch das habe ich versucht mit eben so ziemlich dem selben fehler.
ich habe mich auch schon eine weile im inet umgesehen, bin aber immer wieder auf codebruchstücke gestoßen, bei denen der filename ebenso direkt in der funktion angeben wurde.ich weiß hier leider nicht mehr weiter, vll kann mir jemand das ganze nochmal erklären.
mfg
EDIT:
hier mal die Fehlermeldung:
error C2664: 'D3DXLoadSurfaceFromFileW': Konvertierung des Parameters 4 von 'const char [10]' in 'LPCWSTR' nicht möglich
-
Du scheinst dein Projekt mir aktiviertem Unicode-Flag zu kompilieren. Daher wird die Funktion D3DXLoadSurfaceFromFileW aufgerufen. Um die ASCII-Version dieser Version aufzurufen, hast du zwei verschiedene Möglichkeiten:
1. Unicode-Flag ausschalten. (Geht irgendwo bei den Compiler-Optionen)
2. Anstatt D3DXLoadSurfaceFromFile gleich die ASCII-Version D3DXLoadSurfaceFromFileA aufrufen.EDIT:
Bei MS Visual C++ 2005 kannst du das Unicode-Flag so abschalten:
Projekt-> [Projektname]-Eigenschaften -> Konfigurationseigenschaften -> Allgemein -> Projektstandards -> Zeichensatz auf "nicht festgelegt" setzen.MfG, Jochen
-
joa, schonmal danke dafür
allerdings hängts dann leider an 2 anderen stellen o.Oäußerst seltsam.
EDIT: Diesmal müsste ich ein "W" anhängen, damits richtig funktioniert....
kann mir vll mal einer erklären, was das überhaupt soll?^^EDIT2:
Nachdem ich jetzt den Unicode Flag entfernt hatte, gabs 2 neue Fehler, die ich wie oben beschrieben, behoben habe, indem ich "W"´s hinten an gehängt habe. so, danach gabs die fehler nicht mehr, aber wieder 2 neue
diesmal mit error 1120 und 1119 oder sowas^^
nachdem ich dann besagte funktionen auskommentiert hatte, gings dann auf einmal.mein problem ist jetzt, was soll ich machen?^^
mit eingestelltem unicode funktioniert mein Window aufruf richt, ohne dafür mein surface laden...das übersteigt meine fähigkeiten momentan kollossal^^
erbitte sehenstlich um hilfe!mfg
-
Ich denke mal, dass die anderen Stellen in etwa so aussehen:
Func(...,L"Dies ist ein String",...);
Wenn das Unicode-Flag deaktiviert ist, müsstest du das L vor dem String entfernen...
Aber das ist jetzt nur eine Vermutung von mir, für genauere Informationen müsstest du dann die entsprechenden Codezeilen und Compilermeldungen posten.
-
ok, perfekt^^
allerdings bekomm ich jetzt wieder diese fehler:error LNK2001: Nicht aufgelöstes externes Symbol "_D3DXLoadSurfaceFromFileA@32".
und
fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
-
#ifdef UNICODE
#define D3DXLoadSurfaceFromFile D3DXLoadSurfaceFromFileW
#else
#define D3DXLoadSurfaceFromFile D3DXLoadSurfaceFromFileA
#endifSo in etwa wird D3DXLoadSurfaceFromFile definiert. Je nach Compilereinstellung wird dann entweder die A- oder W-Variante afgerufen.
Das A steht für ASCII, die Funktion erwartet also (const) char* - Strings.
Das W steht für Wide-Character, die Funktion erwartet also (const) wchar_t* - Strings.wchar_t sieht für ein Zeichen 2 Bytes vor, char allerdings nur ein Byte.
mit wchar_t kann man also den UNICODE-Zeichensatz darstellen.MfG, Jochen
-
Der neue Fehler rührt daher, dass du nicht alle libs geklinkt hast. Wahrscheinlich fehlt die d3dx9.lib.
Kannst du aber unter
Projekt-> [Projektname]-Eigenschaften -> Konfigurationseigenschaften -> Linker -> Eingabe -> Zusätzliche Abhängigkeiten
zu deinem Projekt hinzufügen.
-
dankeschön
funktioniert alles wieder^^
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.