DXP GT – Fireplace
DXP GT – Mobile Footer Layer

C++ Probleme beim umwandeln systime->string

Paladin.de

Lt. Junior Grade
Registriert
Juli 2008
Beiträge
421
Also ich möchte aus meiner systime (monat, tag und jahr gesetzt) einen string mit dem format "30 MAY 1986" machen.

Dazu habe ich bisher die Funktion GetDateFormat benutzt.

Code:
SYSTEMTIME Expdate;

Expdate.wDay = 30;
Expdate.wMonth = 5;
Expdate.wYear = 1986;

//werte auf 0 setzen
Expdate.wDayOfWeek = 0;
Expdate.wHour = 0;
Expdate.wMilliseconds = 0;
Expdate.wMinute = 0;
Expdate.wSecond = 0;

char DateArray[128];

LCID test = MAKELCID(MAKELANGID(LANG_ENGLISH,0),SORT_DEFAULT);
dwResult = GetDateFormat(test,0, &Expdate, _T("dd MMM yyyy"), DateArray, (int)sizeof(DateArray));

dwResult = GetLastError();

die Funktion GetLastError gibt den Wert 87 (INVALID_PARAMETER) zurück. dwResult gibt 0 zurück.

jemand ne idee, warum der gewünschte string nciht in DateArray Landet ?

vielen Dank im vorraus!
 
Kannst du vielleicht mal versuchen, die Zeile

LCID test = MAKELCID(MAKELANGID(LANG_ENGLISH,0),SORT_DEFAULT);

in

LCID test = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT);

umzuändern? Ich habe mal in der Doku für das MAKELANGID-Makro nachgeschaut und nichts gefunden, das vermittelt, daß der usSubLanguage-Parameter 0 sein darf.
 
vielen dank für den vorschlag, leider immernoch das selbe :(
 
Bei mir läuft dein Beispiel problemlos.
mit
#include <Windows.h>
#include <TCHAR.H>

und unter VisualStudio 2010 Express liefert dwResult = 12 und GetLastError = 0.
 
@Paladin.de: Entspricht der Code, den du oben gepostet hast, womöglich gar nicht dem Code, mit dem du tatsächlich arbeitest? Bitte sicherstellen, daß du uns hier exakt den Code zeigst, den du auch wirklich verwendest und nicht bloß etwas "ähnliches".
 
Vielen dank für die rückmeldungen.

Ja, es der code, den ich verwende. Ich habe das gefühl, das ich mein Visual Studio falsch konfiguriert habe, da der selbe codeabschnitt in einem anderen Projekt zu funktionieren scheint.
 
Ich hab zwar nur sehr begrenzte C++ und WinAPI-Kenntnisse, aber kann "GetDateFormat" nicht (abhänging vom Betriebssytem) sowohl als "GetDateFormatA" (ANSI) als auch "GetDateFormatW" (Unicode) definiert sein?
Dann müsstest du wohl statt "char DateArray[128]" "_TCHAR DateArray[128]" verwenden, da du sonst ja eine Unicode-Funktion möglicherweise in ANSI-Char-Array schreiben soll.
Obiger Code hat bei mir (Visual Studio 2010 Ultimate, Windows 7 x64) übrigens nicht mal kompiliert. Erst nach dem ich "DateArray" in ein _TCHAR-Array geändert habe gings (dwResult=12, GetLastError=0).
 
TheCadillacMan schrieb:
Ich hab zwar nur sehr begrenzte C++ und WinAPI-Kenntnisse, aber kann "GetDateFormat" nicht (abhänging vom Betriebssytem) sowohl als "GetDateFormatA" (ANSI) als auch "GetDateFormatW" (Unicode) definiert sein?
Dann müsstest du wohl statt "char DateArray[128]" "_TCHAR DateArray[128]" verwenden, da du sonst ja eine Unicode-Funktion möglicherweise in ANSI-Char-Array schreiben soll.
Obiger Code hat bei mir (Visual Studio 2010 Ultimate, Windows 7 x64) übrigens nicht mal kompiliert. Erst nach dem ich "DateArray" in ein _TCHAR-Array geändert habe gings (dwResult=12, GetLastError=0).


Eben, wenn das der Grund gewesen wäre, hätte der OP schon einen Kompilierfehler bekommen. Er konnte den Code aber ohne Probleme übersetzen und bekam erst zur Laufzeit einen Fehler.

Der Grund, warum der Code bei dir nicht ohne Änderung übersetzbar war, ist daß du in deinen Projekteinstellungen "Unicode" aktiviert hast, während der OP scheinbar mit "Multi-Byte-Character-String" arbeitet.
 
Zurück
Oben