6
votes

C ++: Convertir WCHAR_T * en BSTR?

J'essaie de convertir un wchar_t * code> sur btr code>.

#include <iostream>
#include <atlstr.h>

using namespace std;

int main()
{
    wchar_t* pwsz = L"foo"; 

    BSTR bstr(pwsz);

    cout << SysStringLen(bstr) << endl;

    getchar();
}


0 commentaires

3 Réponses :


11
votes

Vous devez utiliser Sysallocstring (puis SysfreString).

BSTR bstr = SysAllocString(pwsz);

// ...

SysFreeString(bstr);


0 commentaires

1
votes

Je pense que le plus facile est soit d'utiliser

cstring

ou

CCOMBSTR

Les deux ont des méthodes qui font ce que Charles mentionné


2 commentaires

cstring ne enveloppe a bstr , bien qu'il ait une méthode pour allouer un btr à partir d'un Cstring ( .allocsystring () ). CSSTRING n'aide pas avec la libération automatique d'un BSTR , cependant.


Eh bien, dans un sens, il enveloppe la fonctionnalité de convertir à un BSTR qui était ce que l'OP voulait, mais techniquement vous êtes correct, alors mon choix de mots n'était pas correct.



2
votes

systringlen () ne doit être utilisé que sur BSTR alloué par sysallocstring () Fonctions familiales. L'utiliser comme vous le ferez conduira à un comportement non défini - le programme peut planter ou produire des résultats inattendus. Mieux encore, utilisez des cours d'emballage - ATL :: CCOMBSTR ou _BSTR_T .


0 commentaires