Я довольно плохо знаком с "областью" C ++, поэтому надеюсь, что это не будет просто еще один глупый вопрос "C ++ strings".
Вот моя проблема. Я хочу интегрировать TagLib (1.5, 1.6, как только мне удастся собрать его для Windows) в существующий проект Windows MFC VS2005. Мне нужно, чтобы читать метаданные аудио файлов (не писать).
Проблема в том, что программа сохраняет имена входных файлов с помощью CString (), и у нее включена опция Unicode (поэтому символы по умолчанию - "wchar_t"). Причина этого (я думаю, что проект был начат кем-то другим) заключается в том, что некоторые из имен входных файлов могут содержать символы Юникода (например, японские или арабские символы).
Например, путь к файлу похож на «d: \ docs \ audio_test \ stragechar ڝ here.mp3», но я получаю его с помощью:
CString fpath = tmpFile->GetFilePath();
Теперь .. если я попытаюсь сделать:
TagLib::FileRef f(fpath.GetBuffer(0));
fpath.ReleaseBuffer();
Я получаю что-то вроде:
неразрешенный внешний символ
"__declspec (dllimport) public:
__thiscall TagLib :: FileName :: FileName (wchar_t
const *) "
Если я попробую что-то вроде:
TagLib::FileRef f(reinterpret_cast<char*>(fpath.GetBuffer(0)));
fpath.ReleaseBuffer();
Я избавляюсь от ошибок компиляции, но «f» является недопустимым указателем / объектом ... и когда я пытаюсь прочитать тег, я получаю утверждение не удалось.
Итак, кто-нибудь может дать мне несколько советов о том, как я должен передать эту CString в форме Unicode в TagLib ?
Обновление: Адрес TagLib: http://developer.kde.org/~wheeler/taglib.html
Спасибо,
Alex