StringCchCopyN ->cannot convert Parameter

Dolphon

Erfahrenes Mitglied
Hi,

ich habe folgenden Code, der in einem anderem Projekt ohne Probleme funktioniert. Nur in dem neuen Projekt nicht:

Folgende Fehlermeldungen erhalte ich:

Code:
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:
#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:
#define DBGTRACE(exp) PrintTraceF(exp)
#define DBGTRACEF(multiexp) PrintTraceF multiexp
 
Zuletzt bearbeitet:
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:
C:
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;
Gruß

PS: Beachte, das du noch Platz für das \0 Zeichen brauchst.
 
Zuletzt bearbeitet:
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:
char* formatStr

geändert werden. Sonst klappt es nicht.
 
Wenn ich deine Definition nehme, dann muss noch

Code:
char* formatStr

geändert werden. Sonst klappt es nicht.
Ja, ich weiß. Du solltest es grundsätzlich mit TCHAR und den generischen Funktionen arbeiten. Dann kannst du beliebig zwischen ANSI und UNICODE umstellen.

Beachte das deine Funktion für MBCS nicht korrekt definiert ist.

Gruß
 
Zurück