Des idées sur la façon de faire un BSTR sur un LPCOLESTR? sotte pour vous attardez sur ..Convertir LPCOLESTR à BSTR?
Répondre
Un LPCOLESTR
est juste un const wchar_t*
, de sorte que vous pouvez utiliser pour créer un SysAllocString()
BSTR
:
LPCOLESTR olestr = ...;
BSTR bstr = SysAllocString(olestr);
Assurez-vous d'appeler SysFreeString()
lorsque vous avez terminé votre BSTR
. Voir aussi la MSDN documentation on BSTR
s
La différence entre BSTR et LPCOLESTR est que BSTR a la longueur de la chaîne précédée de la chaîne, ce qui n'est pas le cas pour LPCOLESTR. Un BSTR n'a pas nécessairement une extrémité de fin de chaîne \ 0, puisque la longueur de la chaîne est préfixée, pour convertir, j'utilise habituellement la classe CComBSTR (atlcomcli.h), le ctor prend soit BSTR ou LPCOLESTR comme argument et il y a un BSTR membre() pour obtenir la représentation BSTR:
CComBSTR b(yourolestring)
// b.BSTR()
CComBSTR se chargera de la allouant/libérant donc aucun risque de fuite de mémoire.
Notez que OLECHAR == wchar_t est vrai uniquement sur une plate-forme Wintel. Je ne sais pas ce que les autres plates-formes étaient, mais c'était des trucs marrants, et sur eux BSTR est probablement juste un char *, aussi, ta réponse est correcte à toutes fins pratiques;) – peterchen