2010-11-30 10 views
1

을 PCWSTR하는 CString을 변환하는 방법 :나는 다음과 같은 방법을 한

VariantFromString(strXMLPath ,vXMLSource); 

및 방법의 서명이 : 이제

HRESULT VariantFromString(PCWSTR wszValue, VARIANT &Variant); 

나는 아래와 같이 CString을 전달하고있는 동안 :

char cCurrentPath[FILENAME_MAX]; 

     if (!GetCurrentDir(cCurrentPath, sizeof(cCurrentPath))) 
      { 
       return errno; 
      } 
CString strXMLPath = cCurrentPath; 
strXMLPath += XMLFILE; 
VariantFromString(strXMLPath ,vXMLSource); 

오류가 발생합니다. CString에서 PCWSTR로 변환 할 수 없습니다.

답변

3

정말 유니 코드 (char 대신 wchar_t)를 사용해야합니다. 이것이 OS가 내부적으로 작동하는 방식이며, 이와 같은 문자 유형간에 끊임없이 변환하지 않아도됩니다.

그러나이 시나리오에서는 CString::AllocSysString을 사용하여 PCWSTR과 호환되는 BSTR으로 변환 할 수 있습니다. SysFreeString으로 해제해야합니다.

VARIANT VariantFromString(const CString& str) 
{ 
    VARIANT ret; 
    ret.vt = VT_BSTR; 
    ret.bstrVal = str.AllocSysString(); 
    return ret; 
} 
+0

나는 내가 아는 CString을 – Simsons

+1

에의 char *에서하지 PCWSTR하는 CString을 변환하려고 :

[편집] 예를 들어, 당신은 당신의 기능을 변경할 수 있습니다. 'CString :: AllocSysString'은'CString'을'PCWSTR'과 호환되는'BSTR'로 변환합니다. – tenfour

+0

또한'BSTR'은'VARIANT'에서 사용되는 것과 똑같습니다. 그래서 실제로 당신의 함수를'HRESULT VariantFromString (const CString & val, VARIANT & variant)'로 바꾸는 것이 가장 좋을 것입니다. – tenfour

관련 문제