Pergunta

Eu sou novo para C ++, então isso pode ser uma pergunta noobish; Eu tenho a seguinte função:

#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.
}

Quando eu depurar através deste código, eu passo na conta número "A101683", por exemplo. Quando se faz a parte SysAllocStringByteLen (), o número da conta torna-se uma combinação de símbolos chineses ...

Qualquer um que podem lançar alguma luz sobre isso?

Foi útil?

Solução

SysAllocStringByteLen é para quando você está criando um BSTR que contém dados binários, cordas não reais - não ANSI para conversão Unicode é executada. Isso explica por que os shows depurador a corda como contendo símbolos aparentemente chineses, ele está tentando interpretar a seqüência ANSI copiado para o BSTR como unicode. Você provavelmente deve usar SysAllocString vez - isso irá converter o corda corretamente para unicode você deve passar uma seqüência de caracteres Unicode. Se você estiver trabalhando com texto real, esta é a função que você deve usar.

Outras dicas

Em primeiro lugar, há um problema com a linha que contém SAFECOPYLEN. Está faltando ')' e não está claro o que é suposto fazer.

A segunda questão é que você não está usando AccountNo em qualquer lugar este código. tmpAccountNumber está na pilha, e poderia ter qualquer coisa nele.

BSTR são arrays de caracteres de dois bytes para que você não pode simplesmente copiar um char * array nele. Em vez de passá-lo "A12123" tentar L"A12323".

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

//Continue with other stuff here.
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top