用法:
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;
}
本文介绍了一种实现宽字符与多字节字符串转换的方法,包括两个主要函数:CStrFromWSTRU用于将宽字符字符串转换为多字节字符串;BSTRFromCStrU用于将多字节字符串转换为宽字符字符串。这两个函数使用了Windows API中的WideCharToMultiByte和MultiByteToWideChar函数来完成转换,并通过CoTaskMemAlloc和CoTaskMemFree进行内存管理。
2736

被折叠的 条评论
为什么被折叠?



