2009-08-01 13 views

Répondre

5

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 BSTRs

+0

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

1

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.