vs2008 유니버설 프로젝트 문제집
오류 발생: 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
또한 유니버설 프로젝트에 자주 필요한 문자 세트 변환 방법을 첨부합니다.
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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.