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))))

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

BSTR、LPSTR和LPWSTR  

 一、   BSTR、LPSTR和LPWSTR   在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的...
  • bichenggui
  • bichenggui
  • 2009年09月16日 17:09
  • 2949

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

今天在写代码的时候碰到这样的问题,网上查了一下,做了以下整理:CString   和   LPCTSTR   可以说通用。   原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操...
  • caowei880123
  • caowei880123
  • 2010年09月17日 17:35
  • 1203

Cstring转LPWSTR/LPCWSTR..BSTR、LPSTR、LPWSTR、CString、VARIANT、COleVariant 、_variant_t、CComBSTR、_bstr_t .

//方法一  CString str=_T("TestStr");  USES_CONVERSION;  LPWSTR pwStr=new wchar_t[str.GetLength()+1];...
  • shuaiqidiudiu
  • shuaiqidiudiu
  • 2013年08月06日 09:19
  • 1663

string转LPCWSTR示例

string str="ABCD"; int len=str.length(); wchar_t* buffer=new wchar_t [len+1]; MultiByteToWideChar(CP...
  • Aaopao
  • Aaopao
  • 2013年11月25日 13:46
  • 599

几种字符集与LPTSTR、LPCSTR、LPSTR、LPCTSTR、LPWSTR、LPCWSTR的意义

1、几种字符集: 所有的string类都是以C-style字符串为基础的。C-style字符串是字符数组。字符类型有三种编码格式: SBCS: 第一种是单字节字符集(single byte char...
  • yibo_ge
  • yibo_ge
  • 2016年04月04日 22:03
  • 934

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

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

PSTR、LPSTR、PCSTR、LPCSTR、LPWSTR、PWSTR、PCWSTR、LPCWSTR、LPCTSTR

不知道是不是ACM以来的习惯的问题,本人从来就是char*,wchar_t*,TCHAR*。。。不常用PSTR、LPSTR这些。。。 下面做下简单总结 typedef char CHAR; typ...
  • W343051232
  • W343051232
  • 2011年12月19日 11:46
  • 4344

CString、LPSTR、std::string、LPCSTR之间的转换

LPSTR WideChar2MBCS( const CString& strCS ) {    const UINT wLen= strCS.GetLength()+ 1;     UINT...
  • stephen1315
  • stephen1315
  • 2012年04月10日 10:28
  • 7152

VC++ BSTR、LPSTR、LPWSTR 区别与联系(学习笔记)

STR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统 提供相应的API函数(如SysAllocS...
  • imsaws
  • imsaws
  • 2013年06月26日 12:06
  • 769

Windows/MFC函数参数中LPSTR,LPCSTR,LPCWSTR_等指针的含义

1. 先了解下相关宏定义: winnt.h 中 typedef char CHAR ; typedef wchar_t WCHAR ; #ifdef UNICODE typedef wchar...
  • u010003835
  • u010003835
  • 2015年08月13日 09:01
  • 954
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LPWSTR与LPSTR转换,使用USES_CONVERSION
举报原因:
原因补充:

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