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();
}
3 Réponses :
Vous devez utiliser Sysallocstring (puis SysfreString).
BSTR bstr = SysAllocString(pwsz); // ... SysFreeString(bstr);
Je pense que le plus facile est soit d'utiliser p>
cstring P>
ou p>
CCOMBSTR P>
Les deux ont des méthodes qui font ce que Charles mentionné p>
cstring code> ne enveloppe i> a
bstr code>, bien qu'il ait une méthode pour allouer un
btr code> à partir d'un
Cstring code> (
.allocsystring () code>).
CSSTRING CODE> n'aide pas avec la libération automatique d'un
BSTR code>, 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.
systringlen () code> ne doit être utilisé que sur BSTR alloué par
sysallocstring () code> 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 CODE> ou
_BSTR_T CODE>. P>