salut
j'ai executé une requete SELECT avec ADO dans VC6. je peux afficher le resultat grace à :
_variant_t var;
var = recordset->Fields->GetItem(L"ville")->GetValue();// ville c'est un attribut de ma table
cout << static_cast<char *>(_bstr_t(var.bstrVal))<< endl;
mais, ce que je veux c'est mettre le resultat dans un char*. comment faire?
merci et à bientot
Salut,
Tu peux utiliser la fonction API WideCharToMultiByte(). Elle permet de convertir proprement un BSTR en char*.
Exemple:
char buffer[200];
WideCharToMultiByte(0,0,var.bstrVal,-1,buffer,200,0,0);
salut
merci [auteurdetail.aspx?ID=255361 juju12], mais si je fait un cout de pText ou meme de pBStr j'obtiens juste des symbols bizzards. j'avais essayé ça et c'est le meme probleme.
quelqu'un peut me dire pourquoi l'affichage direct est correct alors que celui via une variable char * l'est moins?
salut
merci [auteurdetail.aspx?ID= 118008 milhandril] ça marche aussi.
et [auteurdetail.aspx?ID=295159 racpp] , tu peux répondre à [auteurdetail.aspx?ID =118008 milhandril] en ce qui concerne la solution la plus optimale?
merci à tous et à bientot.
Je pense qu'on n'a pas besoin de créer un nouvel objet _bstr_t car il existe déjà. C'est celui fourni dans le membre bstrVal du VARIANT. Il est donc préférable de récupérer juste son contenu afin de l'exploiter.
Tout a fait d'accord avec toi. La déclaraction du nouvel objet je ne l'avais fait que dans un soucis de clarté. Après le fait d'avoir besoin ou non d'une variable temporaire dépend de chaque cas. Je me posais surtout la question par rapport à l'optimisation entre l'utilisation de l'opérateur surchargé dans mon exemple et l'utilisation de WideCharToMultiByte.