CString str(_T("zhangSan"));
::RegSetValueEx(hKey,NULL,0,REG_SZ,CT2CA(str),30);
RegCloseKey(hKey);error C2955: 'ATL::CW2AEX' : error C2664: 'RegSetValueExW' : cannot convert parameter 5 from 'ATL::CW2AEX<>' to 'const BYTE *'环境VS2005、XP、SP3
::RegSetValueEx(hKey,NULL,0,REG_SZ,CT2CA(str),30);
RegCloseKey(hKey);error C2955: 'ATL::CW2AEX' : error C2664: 'RegSetValueExW' : cannot convert parameter 5 from 'ATL::CW2AEX<>' to 'const BYTE *'环境VS2005、XP、SP3
error C2440: 'reinterpret_cast' : cannot convert from 'ATL::CW2AEX<>' to 'const BYTE *'
(const BYTE*)(LPCSTR)CT2CA(str)
里面还是很复杂的,在vc目录下altmfc下面有源代码,我找了一下:template< int t_nBufferLength = 128 >
class CW2AEX
{
public:
CW2AEX( __in_opt LPCWSTR psz ) throw(...) :
m_psz( m_szBuffer )
{
Init( psz, _AtlGetConversionACP() );
}
CW2AEX( __in_opt LPCWSTR psz, UINT nCodePage ) throw(...) :
m_psz( m_szBuffer )
{
Init( psz, nCodePage );
}
~CW2AEX() throw()
{
AtlConvFreeMemory(m_psz,m_szBuffer,t_nBufferLength);
} operator LPSTR() const throw()
{
return( m_psz );
}private:
void Init( __in_opt LPCWSTR psz, __in UINT nConvertCodePage ) throw(...)
{
if (psz == NULL)
{
m_psz = NULL;
return;
}
int nLengthW = lstrlenW( psz )+1;
int nLengthA = nLengthW*4;
AtlConvAllocMemory(&m_psz,nLengthA,m_szBuffer,t_nBufferLength); BOOL bFailed=(0 == ::WideCharToMultiByte( nConvertCodePage, 0, psz, nLengthW, m_psz, nLengthA, NULL, NULL ));
if (bFailed)
{
if (GetLastError()==ERROR_INSUFFICIENT_BUFFER)
{
nLengthA = ::WideCharToMultiByte( nConvertCodePage, 0, psz, nLengthW, NULL, 0, NULL, NULL );
AtlConvAllocMemory(&m_psz,nLengthA,m_szBuffer,t_nBufferLength);
bFailed=(0 == ::WideCharToMultiByte( nConvertCodePage, 0, psz, nLengthW, m_psz, nLengthA, NULL, NULL ));
}
}
if (bFailed)
{
AtlThrowLastWin32();
}
}public:
LPSTR m_psz;
char m_szBuffer[t_nBufferLength];private:
CW2AEX( const CW2AEX& ) throw();
CW2AEX& operator=( const CW2AEX& ) throw();
};typedef CW2AEX<> CW2A;#ifdef _UNICODE #define CW2T CW2W
#define CW2TEX CW2WEX
#define CW2CT CW2CW
#define CW2CTEX CW2CWEX
#define CT2W CW2W
#define CT2WEX CW2WEX
#define CT2CW CW2CW
#define CT2CWEX CW2CWEX #define CA2T CA2W
#define CA2TEX CA2WEX
#define CA2CT CA2W
#define CA2CTEX CA2WEX
#define CT2A CW2A
#define CT2AEX CW2AEX
#define CT2CA CW2A
#define CT2CAEX CW2AEX#else // !_UNICODE #define CW2T CW2A
#define CW2TEX CW2AEX
#define CW2CT CW2A
#define CW2CTEX CW2AEX
#define CT2W CA2W
#define CT2WEX CA2WEX
#define CT2CW CA2W
#define CT2CWEX CA2WEX #define CA2T CA2A
#define CA2TEX CA2AEX
#define CA2CT CA2CA
#define CA2CTEX CA2CAEX
#define CT2A CA2A
#define CT2AEX CA2AEX
#define CT2CA CA2CA
#define CT2CAEX CA2CAEX#endif // !_UNICODE