CInternetSession::SetCookie
Sets a cookie for the specified URL.
static BOOL SetCookie (
LPCSTR pstrUrl,
LPCTSTR pstrCookieName,
LPCTSTR pstrCookieData
)
2번째와 3번째 파라미터는 LPCTSTR형이므로,
비유니코드에서는 char* 형으로, 유니코드에서는 WCHAR*형으로 넣으면 되는 것이다.
하지만, Host 주소가 들어가는 첫번째 파라미터는 LPCSTR......
유니코드인 경우, WideCharToMultiByte를 통해 멀티바이트로 바꿔서 넣어야만 한다????
프로젝트 셋팅에서 2000과 XP의 경우에는 _UNICODE가 Define되어 있는 상태이다.
실험 결과
--------------------------------------------------------------------------------------------------
// 이것은 98, ME, 2000, XP(Debug)
int nHostLen = strHost.GetLength();
TCHAR *pSzUrl = new TCHAR[nHostLen+1];
_tcscpy(pSzUrl, strHost);
pSzUrl[nHostLen] = '\0';
session.SetCookie((LPCSTR)pSzUrl, _T("User"), strUser); // TCHAR*를 LPCSTR로 강제 캐스팅
--------------------------------------------------------------------------------------------------
// 이것은 XP(Release)
char *m_pBuffer = NULL;
// 코드 중략 했음
WideCharToMultiByte(m_CodePage, NULL, strHost, strHost.GetLength(), m_pBuffer, nMultiLength, NULL, NULL);
session.SetCookie((LPCSTR)m_pBuffer, _T("User"), strUser); // 유니코드를 멀티바이트로 변환해야 함
--------------------------------------------------------------------------------------------------
같은 유니코드 환경인 Windows 2000이랑 XP가 반대이며,
더구나, XP는.....Debug 모드랑 Release 모드랑 반대의 상황이!!!!!!!!!!!
원격 디버깅을 해서야 알아냈다.
다행이도 위의 내용을 알아내서, 버그를 해결하긴했지만,
회사에서 밤까지 새는 고통의 억울함이란.............
관련 내용에 대한 자세한 사항을 알고 계시면, 댓글이나 트랙백을 주세요~~;;;;;;;;;;
ps. MFC 7.0에는 아래와 같이 원형이 바뀌었다.
첫번째 파라미터도 LPCTSTR형으로.....
static BOOL SetCookie(
LPCTSTR pstrUrl,
LPCTSTR pstrCookieName,
LPCTSTR pstrCookieData
);
'프로그래밍' 카테고리의 다른 글
C, C++의 포인터...무조건 악몽만은 아니다. (0) | 2006.04.11 |
---|---|
[MFC]CWebBrowser2(웹브라우저 컨트롤)에서 POST 방식으로 데이터 넘기기 소스 (0) | 2006.04.04 |
[Visual C++]data_seg pragma를 이용하여 DLL과 데이터(메모리) 공유하기 (2) | 2005.12.27 |
Microsoft 프로그래밍 언어 4종 비교 분석 (1) | 2005.01.20 |
[프로그래밍]C 언어도 진화한다「C99」 (0) | 2004.09.22 |