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

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

1

21.11.2009, 19:15

Probleme bei der Parameterumwandlung von char* nach LPCWSTR

Hallo.
Die Klasse G3XSprite meiner Engine diehnt zum Laden und Anzeigen von Sprites.
Leider funktioniert die Funktion G3XSprite::Init(...) nicht.
Grund: Multibyte.

Ich übergebe an meine Init-Funktion Init folgende 3 Argumente:


LPDIRECT3DDEVICE device // Pointer auf eine Device
char* texturename // Texturname
D3DCOLOR colorkey // Colorkey


Wie konvertiert man nun char* nach LPCWSTR ?
Ich habe schon so einiges probiert,
doch dann stürzt das Programm ab.

David Scherfgen verwendet in seinem Buch einfach einen char* string.
Warum funktioniert das dort und bei mir nicht ?

(Microsoft Visual Studio 2005, DirectX10, DirectX9 SDK)

Ich bin dankbar für jede Hilfe
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

21.11.2009, 19:22

Übergib keinen char* sondern einen wchar_t* als texturename. Wenn es sich dabei um Literale handelt dann is das einfach:

C-/C++-Quelltext

1
"C:\\blabla\blublub\\texture.jpg"


wird zu

C-/C++-Quelltext

1
L"C:\\blabla\blublub\\texture.jpg"  // Note das L davor


Alternativ kannst du z.b. auch das TEXT() Makro aus windows.h verwenden:

C-/C++-Quelltext

1
TEXT("C:\\blabla\blublub\\texture.jpg")


das kümmert sich drum dass es je nachdem was eingestellt is (UNICODE oder nicht) das richtige tut.

3

21.11.2009, 19:44

Zum Thema Unicode hats im FAQ was gutes:

https://www.spieleprogrammierer.de/phpBB…opic.php?t=9030

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

4

21.11.2009, 19:48

Vielen dank für die Hilfe. Es funktioniert.
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

5

10.12.2009, 12:54

Habe da etwas das vielleicht nützlich sein kann:

#include <string>
using namespace std; // Strings mit Addop liegen mir besser
char* text_conversion = (char*) malloc(500);

und dann einfach verwenden:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
wchar_t* StringToTCHAR(string &orig)
{
     size_t origsize = strlen(orig.c_str()) + 1;
     const  size_t newsize = 2000;
     size_t convertedChars = 0;
     wchar_t wcstring[newsize];

    if ( origsize>=999 ) fehler !!!

    mbstowcs_s( &convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE );

    return wcstring;
}
 
string TCHARToString(const TCHAR* orig)
{
   size_t   i;

   wcstombs_s(&i, text_conversion, (size_t)499, orig, (size_t)499 );

   return text_conversion;
}

Werbeanzeige