Pergunta

Configuração:
Eu tenho uma DLL COM que chama um método dentro de um C # DLL gerenciado. Esta função devolve uma matriz C # cadeia [], que é empacotada para uma SEGURA.

Problema:
Quando eu tento acessar as cordas dentro do I safearray só obter o primeiro caractere da string. O que estou fazendo de errado?

O código:

    // Pointer to the managed interface
    DatabasePtr pODB(__uuidof(DBClass));

    // Get the string[] array from the managed method
    SAFEARRAY* safearray = pODB->GetStringArray();

    HRESULT hresult;

    long ubound;
    long lbound;

    hresult = SafeArrayGetUBound(safearray, 1, &ubound);
    hresult = SafeArrayGetLBound(safearray, 1, &lbound);

    long index;
    BSTR fromarray;

    for (; lbound <= ubound; lbound++)
    {
        index = lbound;

        hresult = SafeArrayGetElement(safearray, &index, (void*)&fromarray);

        char buffer[512];
        sprintf_s(buffer,"%s",fromarray);

        MessageBox(0, (LPCSTR)buffer, "...", 0);
    }

Obrigado por sua ajuda,
! -Sean

Foi útil?

Solução

O BSTR é uma string unicode, então você deve usar um tampão wchar_t eo wsprintf_s. Agora u imprimir a parte ANSI do primeiro caractere unicode, em seguida, parada na \ 0. E, por favor, por favor, não estouro de pilha como aquele (sic!). Use o _vsnwprintf_s_l segura e sua família, seu código é o prazer de um hacker como é agora e o retorno vai ser pwned. Consulte http://msdn.microsoft.com/en- us / library / d3xd30zz (VS.80) .aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top