私は C++ の「分野」にまったく慣れていないので、これが単なる愚かな「C++ 文字列」の質問にならないことを願っています。
これが私の問題です。TagLib (Windows 用にビルドできたらすぐに 1.5、1.6) を既存の Windows MFC VS2005 プロジェクトに統合したいと考えています。オーディオファイルのメタデータを読み取るために必要です(書き込みではありません)。
問題は、プログラムが CString() を使用して入力ファイル名を保存し、Unicode オプションがオンになっていることです (したがって、デフォルトの文字は "wchar_t" です)。この理由 (プロジェクトは他の誰かによって開始されたと思います) は、「入力」ファイル名の一部に Unicode 文字 (たとえば、日本語やアラビア文字) が含まれている可能性があるためです。
たとえば、ファイル パスは「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
ありがとうございました、
アレックス