LPWSTR与LPSTR转换,使用USES_CONVERSION

原创 2014年01月26日 15:47:32
#include 
//在一个函数的循环体中使用A2W等字符转换宏可能引起栈溢出(内存未释放)
//参见对应宏的定义
//Ascii -> wchar
USES_CONVERSION
DoSomething(A2W(aStr));

//wchar -> Ascii
USES_CONVERSION
DoSomething(W2A(aStr));

A2W:
//atlconv.h
#define A2W(lpa) (\
   ((_lpa = lpa) == NULL) ? NULL : (\
      _convert = (lstrlenA(_lpa)+1),\
      ATLA2WHELPER((LPWSTR) alloca(_convert*2), _lpa, _convert)))
#define ATLA2WHELPER AtlA2WHelper
inline LPWSTR WINAPI AtlA2WHelper(LPWSTR lpw, LPCSTR lpa, int nChars, UINT acp)
{
   ATLASSERT(lpa != NULL);
   ATLASSERT(lpw != NULL);
   // verify that no illegal character present
   // since lpw was allocated based on the size of lpa
   // don't worry about the number of chars
   lpw[0] = '\0';
   MultiByteToWideChar(acp, 0, lpa, -1, lpw, nChars);
   return lpw;
}
W2A:
//atlconv.h
#define W2A(lpw) (\
	((_lpw = lpw) == NULL) ? NULL : (\
		(_convert = (ATL::lstrlenW(_lpw)+1), \
		(_convert>INT_MAX/2) ? NULL : \
		ATLW2AHELPER((LPSTR) alloca(_convert*sizeof(WCHAR)), _lpw, _convert*sizeof(WCHAR), _acp))))

版权声明:本文为博主原创文章,未经博主允许不得转载。

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换【转】

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换 VC++ 2010-09-25 21:23:12 阅读457 评论3   字号:大中小 订阅 一.CS...
  • Qsir
  • Qsir
  • 2017年07月11日 17:52
  • 146

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换

转自 http://www.cnblogs.com/carekee/articles/2270526.html   一.CString与LPCWSTR 两者的不同:LPCWSTR 是Uni...

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换

在MFC Opencv编辑中经常用到字符转换问题,特地学习一下。 ==================================================================...

CString与LPCWSTR/LPSTR/LPWSTR/char*等类型的转换

一.CString与LPCWSTR      两者的不同:LPCWSTR 是Unicode字符串指针,初始化时串有多大,申请空间就有多大,以后存贮若超过则出现无法预料的结果,这是它与CStrin...
  • lindyl
  • lindyl
  • 2014年04月23日 17:06
  • 834

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换以及CString和LPCTSTR的关系

一.CString与LPCWSTR      两者的不同:LPCWSTR 是Unicode字符串指针,初始化时串有多大,申请空间就有多大,以后存贮若超过则出现无法预料的结果,这是它与CString的...

CString 和 LPCTSTR 之间的转换 及 LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化

CString   和   LPCTSTR   可以说通用。   原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操作符重载而已。 常量字符串ansi和unicode的区分是...
  • Unimen
  • Unimen
  • 2011年09月17日 16:21
  • 492

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换 VC++ 2010-09-25 21:23:12 阅读457 评论3   字号:大中小 订阅 一....

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换【转】

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换 一.CString与LPCWSTR      两者的不同:LPCWSTR 是Unicode字符串指...

字符串转换_BSTR/LPSTR/LPWSTR/Char

一、BSTR、LPSTR和LPWSTR  在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据...

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换 VC++ 2010-09-25 21:23:12 阅读457 评论3   字号:大中小 订阅 一.CStri...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LPWSTR与LPSTR转换,使用USES_CONVERSION
举报原因:
原因补充:

(最多只允许输入30个字)