char*,wchar_t*,CString和BSTR之间的转换

 

前言

本文并不尝试列举出所有的转换方法,只列举作者认为方便易用的方法。

 

1.char*和wchar_t*的相互转换

可以利用中间类_bstr_t(头文件comdef.h)方便的进行相互转换

const wchar_t* wText = (_bstr_t)"测试";
char* cText = (_bstr_t)L"测试";

 可以通过A2T,A2W,T2A,T2W等宏来进行转换

char* cText = "测试";
USES_CONVERSION;
wchar_t wText = A2W(cText);

其中USES_CONVERSION;用来初始化某些局部变量,至于为什么单独用一个宏来进行变量初始化,http://blog.csdn.net/wuji0447/article/details/4659001中进行了详细说明。

另外因为这些是宏,所以使用的时候要小心,见http://www.cnblogs.com/rainbowzc/archive/2009/09/07/1562168.html

 

 

2.char*转CString

注意:CString的内部实现与项目属性页的Charactor Set配置有关,所以其配置直接影响其与char*或wchar_t*相互转换的方式。

我们可以直接用char*构造CString来将char*转为CString。

在Charactor Set配置项not set的情况下,可以直接用char*构造CString或将char*赋值给CString。在Charactor Set配置项为UNICODE的情况下,可以将之转换为wchar_t*再赋值给CString。

 

3.CString转char*

在Charactor Set配置项not set的情况下,可以直接通过GetBuffer函数将CString转为char*

CString a("测试");
char* cText = a.GetBuffer();

需要注意的是如果我们对cText的内容进行了操作后要想再使用a,则需调用a.ReleaseBuffer()来释放缓存。

 

4.wchar_t*和CString的相互转换

参见2,3

 

5.char*, wchar_t*转BSTR

都可利用中间类_bstr_t来转

char* cText = "测试";
BSTR bstr1 = (_bstr_t)cText;

wchar_t* wText = L"测试";
BSTR bstr2 = (_bstr_t)wText;

 

可使用SysAllocString等函数转。

BSTR bText1 = ::SysAllocString(L"测试");
BSTR bText2 = ::SysAllocStringLen(L"测试",2);
。。。
// 用完释放
SysFreeString(bText1); 
SysFreeString(bText2);

 

6.BSTR转char*, wchar_t*

都可利用中间类_bstr_t来转

 

7.CString转BSTR

CString a(L"测试");
BSTR bstr = a.AllocSysString();
SysFreeString(bstr); // 用完释放

 

8.BSTR转CString

BSTR可通过直接构造或赋值给CString来转换为CString

BSTR bstr = (_bstr_t)cText;
CString a = bstr;

 

posted @ 2014-09-05 09:54  Jingle Guo  阅读(8099)  评论(4编辑  收藏  举报