유지은 님이 쓰신 글 :
: 안녕하세요 혼자 힘으로 하다가 도저히 모르겠네요..
:
: mfc에서
:
: CString s;
:
: s = (LPCTSTR)(_bstr_t)m_CpDibObj->GetHeaderValue(0);
:
: 이런 코드를 빌더로 바꿀려고 했는데 이래저래 자꾸 에러만 나네요 ㅠㅜ
:
: AnsiString s;
:
: s = (LPCTSTR)(_bstr_t)m_CpDibObj->GetHeaderValue(0); 이랬더니 난리가 납니다^^;;
:
: (LPCTSTR)(_bstr_t) 이게 문제인거 같은데 빌더에선 어떻게 바꿔야 될지 도통 모르겠네요..
:
: 이 문장을 어떻게 바꿔야 되네요?
답변:
각기 타입에 대한 형변환을 처리해주는 operator 들을 갖고있는 클래스로 구현되어 있는Variant 와는 달리...
VARIANT는 struct로 정의되어있는 native 타입 입니다. 따라서 어떤 VARIANT 데이타를 특정 타입으로 형변환 하기
위해선 해당 VARIANT의 실제 타입을 먼저 확인해서, 거기에 맞게 변환해 주는 코드를 구현해 줘야 합니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// VARIANT 실제 타입이 VT_LPSTR 이라고 가정
VARIANT v;
v.vt = VT_LPSTR;
v.lVal = reinterpret_cast< LONG >("hello");
AnsiString s;
// VARIANT 의 실제 타입에 따라서 형변환이 필요
if (v.vt == VT_LPSTR) {
s = reinterpret_cast< char* >(v.lVal);
}
else if (v.vt == VT_LPWSTR) {
wchar_t *wp = reinterpret_cast< wchar_t* >(v.lVal);
}
..........
Caption = s;
}
...
위와 같은 식으로 VARIANT v의 실제 타입을 확인해서, 해당 하는 타입에 따라서 형변환을 해주는 코드를
구현해 줘야 합니다. 위에서는 VARIANT 타입이 VT_LPSTR 이라고 가정한 경우고... VT_LPWSTR, VT_DATE 등의
다른 타입이라면 거기에 맞는 형변환 코드를 구현해 줘야 합니다.
...
|