Как конфертировать из CString в PCWSTR - PullRequest
1 голос
/ 30 ноября 2010

У меня есть следующий метод:

    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

1 Ответ

3 голосов
/ 30 ноября 2010

Вы действительно должны использовать Unicode (wchar_t вместо char).Именно так ОС работает внутренне и избавляет от необходимости постоянно преобразовывать типы символов, подобные этому.

Но в этом сценарии вы можете использовать CString::AllocSysString для преобразования его в BSTR, что совместимос PCWSTR.Просто убедитесь, что он освобождается с помощью SysFreeString.

[править] Например, вы можете изменить свою функцию на:

VARIANT VariantFromString(const CString& str)
{
    VARIANT ret;
    ret.vt = VT_BSTR;
    ret.bstrVal = str.AllocSysString();
    return ret;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...