ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
788
788
EMPFEHLEN
-
Hi,
ich habe folgenden Code, der in einem anderem Projekt ohne Probleme funktioniert. Nur in dem neuen Projekt nicht:
Folgende Fehlermeldungen erhalte ich:
Code :1 2 3
Error 2 error C2664: 'StringCchCopyNW' : cannot convert parameter 1 from 'char [500]' to 'STRSAFE_LPWSTR' Error 3 error C2664: 'StringCchVPrintfW' : cannot convert parameter 1 from 'char' to 'STRSAFE_LPWSTR' Error 4 error C2664: 'OutputDebugStringW' : cannot convert parameter 1 from 'char [500]' to 'LPCWSTR'
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
#define MAX_TRACE_LINE_LEN 500 const char DEBUG_PREFIX[] = "XXXXXX: "; const int DEBUG_PREFIX_LEN = strlen(DEBUG_PREFIX); void PrintTraceF(__in char* formatStr, ...) { va_list args; va_start( args, formatStr); PrintTraceWithArgs(formatStr,args); va_end(args); } void PrintTraceWithArgs(__in char* formatStr, va_list& args) { char szFormatedStr[MAX_TRACE_LINE_LEN]; size_t cchDebugPrefix = sizeof(DEBUG_PREFIX) / sizeof(DEBUG_PREFIX[0]); StringCchCopyN(szFormatedStr, MAX_TRACE_LINE_LEN, DEBUG_PREFIX, cchDebugPrefix); StringCchVPrintf(&szFormatedStr[DEBUG_PREFIX_LEN], MAX_TRACE_LINE_LEN-1-DEBUG_PREFIX_LEN, formatStr, args); // Ensure NULL termination in case of long strings szFormatedStr[MAX_TRACE_LINE_LEN-1] = '\0'; OutputDebugString(szFormatedStr); }
Aufgerufen wird das ganze über z.B. "DBGTRACEF(("Failed on " #exp ", hr=%08x\n",hr)); "
Mittels define wird dann das passende aufgerufen:
Code :1 2
#define DBGTRACE(exp) PrintTraceF(exp) #define DBGTRACEF(multiexp) PrintTraceF multiexp
Geändert von Dolphon (13.10.09 um 10:30 Uhr)
Leg dich mit dem Besten an, und stirb wie alle dann******
-
13.10.09 10:32 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Du hast die UNICODE oder MBCS Unterstützung eingeschaltet und "const char[]" kann nunmal nicht in "const wchar_t*" konvertiert werden.
Entweder du schaltest auf den ANSI Zeichensatz um, oder du definierst es so:
GrußCode c:1 2 3 4 5 6
const TCHAR DEBUG_PREFIX[] = TEXT("XXXXXX: "); const size_t DEBUG_PREFIX_LEN = _tcslen(DEBUG_PREFIX); ... TCHAR szFormatedStr[MAX_TRACE_LINE_LEN]; size_t cchDebugPrefix = DEBUG_PREFIX_LEN;
PS: Beachte, das du noch Platz für das \0 Zeichen brauchst.Geändert von deepthroat (13.10.09 um 10:34 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Besten Dank für deine Hilfe.
Das Projekt stand auf Unicode und das andere ist im MBCS Format.
Umgestellt und siehe da es funktioniert.
Wenn ich deine Definition nehme, dann muss noch
Code :1
char* formatStr
geändert werden. Sonst klappt es nicht.Leg dich mit dem Besten an, und stirb wie alle dann******
-
13.10.09 13:26 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
cannot convert parameter 2 from 'class CString' to 'char *'
Von shader09 im Forum C/C++Antworten: 1Letzter Beitrag: 20.11.07, 17:59 -
cannot convert parameter 3 from 'unsigned long (void)'...
Von FBIagent im Forum C/C++Antworten: 0Letzter Beitrag: 22.11.05, 16:31 -
convert
Von DJBUNDI im Forum Linux & UnixAntworten: 3Letzter Beitrag: 21.10.04, 11:57 -
cannot convert parameter 1 from 'CStringArray' to 'CStringArray'
Von SittingDuck im Forum VisualStudio & MFCAntworten: 3Letzter Beitrag: 26.05.04, 10:58 -
MAC/PC convert?
Von teene im Forum Sonstige Grafik-ProgrammeAntworten: 7Letzter Beitrag: 28.01.02, 22:46





Zitieren

Login






