いつもお世話になっております。
ショートカットファイルから実態を得る方法として、IPersistFileのLoad
で行っています。しかしuTorrent(ミュー:ギリシャ文字)の様なファイル
をLoadすると失敗してしまいます。
何か良策は有りませんでしょうか?
使用コードを下記に記載しておきます。
宜しくお願いいたします。
CString
Foo::ResolveLinkFile( LPCSTR pszShortcutFile )
{
BOOL ret = false;
HRESULT res;
IShellLink* psl;
WIN32_FIND_DATA wfd;
char szAppName[ MAX_PATH ];
CoInitialize( 0 );
res = CoCreateInstance( CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER,
IID_IShellLink, (void **)&psl );
if( SUCCEEDED( res ) ){
IPersistFile* ppf;
res = psl->QueryInterface( IID_IPersistFile, ( void ** )
&ppf );
if( SUCCEEDED( res ) ){
WCHAR wsShcut[ MAX_PATH ];
MultiByteToWideChar( CP_ACP, 0, pszShortcutFile, -
1, wsShcut, MAX_PATH );
if( SUCCEEDED( ppf->Load( wsShcut, STGM_READ ) ) )
ret = SUCCEEDED( psl->GetPath( szAppName,
MAX_PATH, &wfd, SLGP_UNCPRIORITY ) );
ppf->Release();
}
psl->Release();
}
CoUninitialize();
return szAppName;
}
すみません、記載漏れです。
環境
Visual C++ 2005 SP1
Windows XP/Vista
文字セット
マルチバイト文字
で開発しております。
UNICODE設定にしてみるとか。
そのプロジェクトは昔からの名残も有り、Unicodeへ全域変更するのは
正直かなり苦しい感じなので、マルチバイト文字の設定のまま何とか
したいのですが、何か良い手はないものでしょうか?
ユニコードなファイル名を扱う部分だけ使用するAPIやデータをUNICODEにするだ
けでもいいとは思います。
そして、一度マルチバイトに変換した文字列は完全に元には戻せない筈です。
シャノン様、ぬふや様、
情報有難うございます。
むふー一度マルチバイトで受けてしまった後に元に戻せないとすると
結構根本的にコードを見直さないといけない感じに思えて来ました。
# 色々な箇所にそのデータを流用している為
もう少しトライ&エラーしてみて、何からの結論が見えた段階で
解決チェックしようと思います。
うーん、苦しいですねぇ ^-^;;
色々トライしたのですが、結局Unicodeに染まる事にしました(涙)
一応解決にしておきます。
有難うございました~