大家可以看下这个人的:
http://blog.youkuaiyun.com/jize00/article/details/4379478
LPTSTR: LPSTR/LPWSTR 二选一 ,Ansi/Unicode环境决定
(char *)/(wchar_t *)
LPCTSTR:LPCSTR/LPCWSTR 二选一,Ansi/Unicode环境决定
(const char*)/(const w_char*)
LPBYTE: (unsigned char*)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
LPSTR:即char*,也就是char c_arr[256]; 这种形式,代码中可以用char数组进行操作
LPWSTR:即wchar_t*,也就是WCHAR wc_arr[256]; 代码中可以用wchar数组对齐赋值
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/********************************************************************************/
//程序为Unicode环境
//我遇到的几种类型转换
/*******************************************************************************/
1.CString ------> LPSTR
CStringm_LogicalService=_T("aaaaaa");
charm_szLogicalService[256];
memset(m_szLogicalService, 0, sizeof(m_szLogicalService));
#ifdef _UNICODE
size_t sizeConverted = 0;
wcstombs_s(&sizeConverted, m_szLogicalService, 250, (LPCTSTR)m_LogicalService, m_LogicalService.GetLength());
#else
strcpy(m_szLogicalService, (LPCSTR)m_LogicalService);
#endif // _UNICODE
2.LPCTSTR------->LPBYTE, 输入参数是LPCTSTR,所需要转换成LPBYTE
LONG CPrinterBTT080Ctrl::PrinterPrintText(LPCTSTR strText, LONG type)
{
#ifdef _UNICODE
int nLen = _tcsclen(strText);
//LPBYTE m_lpbyte = new BYTE[2*nLen+1];//因为可能存在中文字的情况,所以*2,怕所有的都是中文所以+1
LPBYTE m_lpbyte = new BYTE[2*nLen+20];//20长度用于位置10|10
WideCharToMultiByte(CP_ACP,0,strText,_tcsclen(strText)*sizeof(TCHAR),(LPSTR)m_lpbyte,2*nLen+1,NULL,NULL);
//m_lpbyte[2*nLen+1] = '\0';
#else
CString str = strText;
int n = str.GetLength();
LPBYTE m_lpbyte = new BYTE[n+1];
for(int i=0;i<n+1;i++)
{
m_lpbyte[i] = str[i];
}
m_lpbyte[n]='\0';
#endif // _UNICODE
LPBYTE lpbDate = m_lpbyte;
delete [] m_lpbyte;
...//省略我的其他代码
delete [] m_lpbyte;
}
3.LPCTSTR-------------->LPSTR,
LONG CPrinterBTT080Ctrl::PrinterPrintForm(LPCTSTR strFormName, LPCTSTR strData, LONG type)
{
char m_szStrFormName[512];
memset(m_szStrFormName,0x00,sizeof(m_szStrFormName));
int nLen = _tcsclen(strData);
LPSTR m_szStrData = new char[2*nLen+1];//因为可能存在中文字的情况,所以*2,怕所有的都是中文所以+1
memset(m_szStrData,0x00,sizeof(m_szStrData));
#ifdef _UNICODE
WideCharToMultiByte(CP_ACP,0,strData,_tcsclen(strData)*sizeof(TCHAR),(LPSTR)m_szStrData,2*nLen+1,NULL,NULL);
WideCharToMultiByte(CP_ACP,0,strFormName,_tcsclen(strFormName)*sizeof(TCHAR),m_szStrFormName,512,NULL,NULL);
#else
//strcpy(m_szStrData, strData);
m_szStrData = strData;
strcpy(m_szStrFormName,strFormName);
#endif // _UNICODE
LPSTR lpszFormName = m_szStrFormName;
LPSTR lpszFields = m_szStrData;
...//
delete [] m_szStrData;
}