Frage

Ich bin neu in C ++, so kann dies eine noobish Frage sein; Ich habe die folgende Funktion:

#define SAFECOPYLEN(dest, src, maxlen)                               \
{                                                                    \
    strncpy_s(dest, maxlen, src, _TRUNCATE);                          \
    dest[maxlen-1] = '\0';                                            \
}

short _stdcall CreateCustomer(char* AccountNo)
{
    char tmpAccountNumber[9];
    SAFECOPYLEN(tmpAccountNumber, AccountNo, 9);
    BSTR strAccountNumber = SysAllocStringByteLen(tmpAccountNUmber, 9);

    //Continue with other stuff here.
}

Wenn ich durch diesen Code debuggen, gehe ich in der Kontonummer „A101683“ zum Beispiel. Wenn es die SysAllocStringByteLen () Teil der Fall ist, wird die Kontonummer eine Kombination aus chinesischen Symbole ...

Jeder, der etwas Licht auf diesem verschütten kann?

War es hilfreich?

Lösung

SysAllocStringByteLen ist gemeint, wenn Sie eine BSTR schaffen enthalten Binärdaten, keine echten Saiten - keine ANSI, Unicode-Konvertierung durchgeführt wird. Dies erklärt, warum der Debugger die Zeichenfolge als enthält offenbar chinesische Symbole zeigt, es wird versucht, die ANSI-Zeichenfolge in das BSTR als Unicode kopiert zu interpretieren. Sie sollten wahrscheinlich verwenden SysAllocString statt - das wird die konvertieren Zeichenfolge richtig Unicode Sie müssen es sich um eine Unicode-String übergeben. Wenn Sie mit den tatsächlichen Text arbeiten, ist dies die Funktion sollten Sie verwenden.

Andere Tipps

Zunächst einmal gibt es ein Problem mit der Zeile mit SAFECOPYLEN. Es fehlt ‚)‘, und es ist nicht klar, was es tun soll.

Das zweite Problem ist, dass Sie nicht in diesem Code mit AccountNo. tmpAccountNumber ist auf dem Stack und konnte in ihm nichts.

BSTR ist Double-Byte-Zeichen-Arrays, so dass Sie nicht nur einen char * Array hinein kopieren. Statt übergeben Sie "A12123" L"A12323" versuchen.

short _stdcall CreateCustomer(wchar_t* AccountNo)
{
wchar_t tmpAccountNumber[9];
wcscpy(tmpAccountNumber[9], AccountNo);
BSTR strAccountNumber = SysAllocStringByteLen(tmpAccountNUmber, 9);

//Continue with other stuff here.
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top