vs2008 유니버설 프로젝트 문제집

4539 단어
1.“void ATL::CStringT::Format(const wchar_t *,...)”: 매개변수 1을 const char[11]에서 const wchar t *로 변환할 수 없습니다.
오류 발생: Cstring strConnect,
strConnect.Format(_T("DSN=Hotel;"));이 코드는 vc6.0에 문제가 없습니다. 2008년에 위의 문제가 발생했습니다. 해결 방법:
해결 방법: 문자 집합 문제, VC6 프로젝트는 기본적으로 다자 바이트, VS2008은 기본적으로 유니코드입니다.
예: Format("%s",str),
Format(L "%s",str) 또는 Format(T("%s"),str)로 변경하면 됩니다.
2. "const char[11]"에서 "ATL::CstringT"로 변환할 수 없음
해결 방법: 먼저 정의하고 별도로 값을 부여합니다.
예: Cstring str = 모드 대화 상자,
다음으로 수정됨: Cstring str;str = 모드 대화 상자,또는 Cstring str(모드 대화 상자);그럼 되잖아.
3、 Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast error C2664: "sprintf": 인자 2를 "const char"에서 "LPCWSTR"로 바꿀 수 없습니다. 가리키는 형식과 무관합니다.변환 요구 사항reinterpretcast, C 스타일 변환 또는 함수 스타일 변환 문제의 원인은 문자열 ANSI와 유니코드 인코딩의 차이이다. VC6와 VS2003 등은 기본적으로 ANSI 인코딩을 사용하고 VS2008은 기본적으로 유니코드를 사용한다.쉽게 말하면 ANSI는 1바이트, 유니코드는 2바이트로 1문자를 나타낸다.VS2008에서 a,alt+F7을 설정하고 프로젝트 속성 설정 메뉴에 들어갑니다.b. 왼쪽 아래 메뉴에서 configurationproperties -->General -->왼쪽 프로젝트 default에서character set에 not set을 설정합니다.c、OK! 실수가 사라지다.
4. char 대신 TCHAR을 사용합니다.
5. 포함 파일을 열 수 없음: "xx.h": No such file or directory
자신의 함수인 경우 #include #include "xx.h"로 변경
시스템의 함수인 경우 #include
또한 유니버설 프로젝트에 자주 필요한 문자 세트 변환 방법을 첨부합니다.
util.h
#include <string>

char* cstring2pchar(CString strData)
{
	int nLength = strData.GetLength();
	//   (unicode)      (char*),      
	int nBytes = WideCharToMultiByte(CP_ACP,0,strData,nLength,NULL,0,NULL,NULL);
	char* VoicePath = new char[ nBytes + 1];
	memset(VoicePath,0,nLength + 1);
	//      
	WideCharToMultiByte(CP_OEMCP, 0, strData, nLength, VoicePath, nBytes, NULL, NULL); 
	VoicePath[nBytes] = 0;
	return VoicePath;
}
LPWSTR string2Unicode(string strData)
{
	int unicode_size = MultiByteToWideChar(CP_ACP, 0,strData.c_str(), -1, NULL, 0);
	LPWSTR wstr = new WCHAR[unicode_size + 1];

	wstr[unicode_size]=0;

	MultiByteToWideChar(CP_ACP, 0, strData.c_str(), -1, wstr, unicode_size);
	return wstr;

}

std::string utf2ansi(LPCSTR pszSrc, int nLen)
{
	int nSize = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)pszSrc, nLen, 0, 0);
	if(nSize <= 0) return NULL;
	WCHAR *pwsz = new WCHAR[nSize+1];
	if( NULL == pwsz) return NULL;
	MultiByteToWideChar(CP_UTF8, 0,(LPCSTR)pszSrc, nLen, pwsz, nSize);
	pwsz[nSize] = 0;
	char *psz = new char[nSize+1];
	WideCharToMultiByte(CP_ACP, 0, pwsz, nSize, psz, nSize, NULL, NULL);
	string str = psz;
	delete pwsz;
	delete psz;
	return str;
}

LPWSTR AnsiToUnicode(LPCSTR astr)
{
	int unicode_size = MultiByteToWideChar(CP_ACP, 0, astr, -1, NULL, 0);
	LPWSTR wstr = new WCHAR[unicode_size + 1];

	wstr[unicode_size]=0;

	MultiByteToWideChar(CP_ACP, 0, astr, -1, wstr, unicode_size);
	return wstr;
}
/**
LPCTSTR ansi2Char(string data)
{
	

	int nSize = WideCharToMultiByte(CP_ACP, 0, NULL, nSize, (LPTSTR)data.c_str(), 0, NULL, NULL);
	if(nSize <= 0) 
		return NULL;

	char *psz = new char[nSize+1];
	WideCharToMultiByte(CP_ACP, 0, NULL, nSize, psz, nSize, NULL, NULL);
	string str = psz;


	WCHAR *pwsz = new WCHAR[nSize+1];
	if( NULL == pwsz) 
		return NULL;
	MultiByteToWideChar(CP_UTF8, 0,(LPCSTR)psz, nSize, pwsz, nSize);
	pwsz[nSize] = 0;

	delete pwsz;
	delete psz;
	return pwsz;
}

*/
std::string WChar2Ansi(LPCWSTR pwszSrc)
{
	int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
	if (nLen<= 0) return std::string("");
	char* pszDst = new char[nLen];
	if (NULL == pszDst) return std::string("");
	WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
	pszDst[nLen -1] = 0;
	std::string strTemp(pszDst);
	delete [] pszDst;
	return strTemp;
}
string ws2s(wstring& inputws){ return WChar2Ansi(inputws.c_str()); }

//Converting a Ansi string to WChar string
std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen)
{
	int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);
	if(nSize <= 0) return NULL;
	WCHAR *pwszDst = new WCHAR[nSize+1];
	if( NULL == pwszDst) return NULL;
	MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);
	pwszDst[nSize] = 0;
	if( pwszDst[0] == 0xFEFF) // skip Oxfeff
		for(int i = 0; i < nSize; i ++) 
			pwszDst[i] = pwszDst[i+1]; 
	wstring wcharString(pwszDst);
	delete pwszDst;
	return wcharString;
}

좋은 웹페이지 즐겨찾기