VC unicode下Cstring转char*

用法:
CStrFromWSTRU(CP_ACP, CString, CString.GetLength(), char*);
BSTRFromCStrU(CP_ACP, char*, CString);

函数定义:
BOOL CStrFromWSTRU(IN UINT codePage, IN LPCWSTR wstr, IN UINT len, OUT char *pStr)
{
if (len > 0)
{
size_t mblen = WideCharToMultiByte(codePage, 0, wstr, len, NULL, 0, NULL, NULL);
if (mblen > 0)
{
char buffer = (char )CoTaskMemAlloc(mblen + 1);
ZeroMemory(buffer, mblen + 1);
if (WideCharToMultiByte(codePage, 0, wstr, len, buffer, mblen, NULL, NULL))
{
//buffer[mblen] = ‘\0’;
memcpy(pStr, buffer, mblen);
*(pStr + mblen) = ‘\0’;
CoTaskMemFree(buffer);
return TRUE;
}
}
}
else *pStr = ‘\0’;

return FALSE;

};

BOOL BSTRFromCStrU(IN UINT codePage, IN LPCSTR s, OUT CString &csWStr)
{
csWStr = _T(“”);
int wideLen = MultiByteToWideChar(codePage, 0, s, -1, NULL, 0);
if (wideLen > 0)
{
WCHAR* wideStr = (WCHAR*)CoTaskMemAlloc(wideLen*sizeof(WCHAR));
if (NULL != wideStr)
{
BSTR bstr;

        ZeroMemory(wideStr, wideLen*sizeof(WCHAR));
        MultiByteToWideChar(codePage, 0, s, -1, wideStr, wideLen);
        bstr = SysAllocStringLen(wideStr, wideLen - 1);
        CoTaskMemFree(wideStr);

        csWStr = bstr;
        SysFreeString(bstr);
        return TRUE;
    }
}
return FALSE;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值