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

1

12.07.2006, 19:47

TCHAR in Datei ausgeben

ich möchte mir den inhalt eines TCHAR in eine datei ausgeben, allerdings hab ich da wenig erfolg.

Zitat


TCHAR* buffer = NULL;
int iLength = 0;

iLength = GetWindowTextLength(hNam);

if (iLength > 0)
{
std::ofstream output("Output.txt",
std::ios::out);

buffer = (TCHAR*) malloc(iLength * sizeof(TCHAR));

GetWindowText(hNam, buffer, iLength);

output.write((char*)buffer, iLength);

output.close();

if (buffer != NULL)
free(buffer); buffer = NULL;
}


Wo ist da der Fehler?

Anonymous

unregistriert

2

12.07.2006, 19:48

Kommt drauf an von welchem Typ TCHAR momentan bei Dir ist.

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

3

12.07.2006, 20:02

Re: TCHAR in Datei ausgeben

Zitat von »"YetAnotherNoob"«

ich möchte mir den inhalt eines TCHAR in eine datei ausgeben, allerdings hab ich da wenig erfolg.

Zitat


TCHAR* buffer = NULL;
int iLength = 0;

iLength = GetWindowTextLength(hNam);

if (iLength > 0)
{
std::ofstream output("Output.txt",
std::ios::out);

buffer = (TCHAR*) malloc(iLength * sizeof(TCHAR));

GetWindowText(hNam, buffer, iLength);

output.write((char*)buffer, iLength);

output.close();

if (buffer != NULL)
free(buffer); buffer = NULL;
}


Wo ist da der Fehler?


versuchs mal mit: output.write((char*)buffer, iLength * sizeof(TCHAR));
Was es alles gibt, das ich nich brauche - Aristoteles

4

13.07.2006, 01:24

Re: TCHAR in Datei ausgeben

Zitat von »"CW_Kovok"«

Zitat von »"YetAnotherNoob"«

ich möchte mir den inhalt eines TCHAR in eine datei ausgeben, allerdings hab ich da wenig erfolg.

Zitat


TCHAR* buffer = NULL;
int iLength = 0;

iLength = GetWindowTextLength(hNam);

if (iLength > 0)
{
std::ofstream output("Output.txt",
std::ios::out);

buffer = (TCHAR*) malloc(iLength * sizeof(TCHAR));

GetWindowText(hNam, buffer, iLength);

output.write((char*)buffer, iLength);

output.close();

if (buffer != NULL)
free(buffer); buffer = NULL;
}


Wo ist da der Fehler?


versuchs mal mit: output.write((char*)buffer, iLength * sizeof(TCHAR));


Danke, funktioniert halb. Es wird immer ein leerzeichen zwischen jedem zeichen ausgegeben. Das Wort "Hallo" kommt also so in der Datei an: "H a l l o". Die Leerzeichen werden im hexeditor mit hex 00 angegeben....ist leerzeichen nicht normal hex 20 ?

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

5

13.07.2006, 09:58

Das liegt daran, dass du Unicode benutzt. Dort werden für jedes Zeichen zwei Bytes gebraucht.
Mach einfach folgendes, wenn du auf Unicode verzichten kannst:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char* buffer = NULL; 
int iLength = 0; 

iLength = GetWindowTextLength(hNam); 

if (iLength > 0) 
{ 
std::ofstream output("Output.txt", 
std::ios::out); 

buffer = new char[iLength+1]; 

GetWindowText(hNam, buffer, iLength+1); 

output.write(buffer, iLength);
//oder einfach output<<buffer; 

output.close(); 

delete[] buffer;
buffer = NULL; 
}

6

13.07.2006, 13:30

den work-around mit char könnte ich machen, aber gibt es keine Möglichkeit tchar in eine datei auszugeben?!?

edit: Also so, dass keine unnötigen Leerzeichen mitankommen.

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

7

13.07.2006, 13:47

Das ist kein Leerzeichen, sondern wirklich eine 0x00. Das soll auch kein Leerzeichen sein.

Hier gibt es jetzt zwei Möglichkeiten: entweder schaust du dir deine Datei in einem Editor an, der Unicode-Zeichen versteht, oder du stellst sicher, dass dein String vor dem Speicher in ASCII Zeichen konvertiert wurde (oder etwas allgemeiner, in ISO-Latin1 Zeichen)

Wie man das richtig macht, steht zum Beispiel hier (MSDN ist dein Freund): http://msdn.microsoft.com/en-us/library/c426s321.aspx Lesen, und verstehen. Unten steht auch noch ein Link auf "International Programming", den man auch lesen sollte.

Character-Mapping ist kein leichtes Thema, weil man leicht den Überblich verliert, in welchem Zeichen-Format ein Text vorliegt, besonders, wenn externe Dateien involviert sind.

MfG,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Werbeanzeige