我對C++的「區域」很陌生,所以我希望這不會是另一個愚蠢的「C++字符串」問題。用TagLib在文件名中用Unicode字符打開文件
這是我的問題。我想將TagLib(1.5,1.6,只要我設法爲Windows構建它)整合到現有的Windows MFC VS2005項目中。我需要它來讀取音頻文件元數據(不寫)。
問題是程序使用CString()存儲輸入文件名,並且它打開了Unicode選項(所以默認字符是「wchar_t」)。這個原因(我認爲該項目是由其他人開始的)是,某些「輸入」文件名可能包含Unicode字符(例如Japanse或阿拉伯字符)。
例如,文件路徑是一樣的東西 「d:\文檔\ audio_test \ stragecharڝhere.mp3」,但我得到它:
CString fpath = tmpFile->GetFilePath();
現在..如果我嘗試做:
TagLib::FileRef f(fpath.GetBuffer(0));
fpath.ReleaseBuffer();
我得到的是這樣的:
解析外部符號 「__declspec(dllimport的)市民: __thiscall標籤庫::文件名::文件名(wchar_t的 常量*)」
如果我嘗試類似:
TagLib::FileRef f(reinterpret_cast<char*>(fpath.GetBuffer(0)));
fpath.ReleaseBuffer();
我擺脫了編譯錯誤的,但 「F」 是無效的指針/對象..當我嘗試讀取標籤時,我收到一個斷言失敗。
那麼,任何人都可以給我一些關於如何將該CString,以Unicode形式傳遞給TagLib的指針?
更新:TagLib address: http://developer.kde.org/~wheeler/taglib.html
謝謝
亞歷
的確,圖書館從* nix移植到了windows。實際上,它使用一些#ifdef來根據平臺選擇數據類型。 在某些時候,我將不得不爲Windows自己編譯它(最新版本),因爲現在我正在使用預編譯的1.5 MSVC版本。 我將再次嘗試使用它 - 目前,項目的優先級已更改:) 謝謝 – Alex 2009-10-07 11:24:05