ギリシャ文字のショートカットファイルのResolve

[戻る]
キット 2007/02/24(土) 23:44:36
いつもお世話になっております。

ショートカットファイルから実態を得る方法として、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;
}

キット 2007/02/25(日) 00:00:14
すみません、記載漏れです。

環境
Visual C++ 2005 SP1
Windows XP/Vista

文字セット
マルチバイト文字

で開発しております。

シャノン 2007/02/25(日) 04:07:08
UNICODE設定にしてみるとか。

キット 2007/02/25(日) 17:04:26
そのプロジェクトは昔からの名残も有り、Unicodeへ全域変更するのは
正直かなり苦しい感じなので、マルチバイト文字の設定のまま何とか
したいのですが、何か良い手はないものでしょうか?

ぬふや 2007/02/25(日) 17:55:50
ユニコードなファイル名を扱う部分だけ使用するAPIやデータをUNICODEにするだ
けでもいいとは思います。
そして、一度マルチバイトに変換した文字列は完全に元には戻せない筈です。

キット 2007/02/26(月) 00:50:29
シャノン様、ぬふや様、

情報有難うございます。
むふー一度マルチバイトで受けてしまった後に元に戻せないとすると
結構根本的にコードを見直さないといけない感じに思えて来ました。
# 色々な箇所にそのデータを流用している為

もう少しトライ&エラーしてみて、何からの結論が見えた段階で
解決チェックしようと思います。

うーん、苦しいですねぇ ^-^;;

キット 2007/02/26(月) 23:44:42
[[解決]]
色々トライしたのですが、結局Unicodeに染まる事にしました(涙)

一応解決にしておきます。

有難うございました〜

古いスレッドには追加発言できません。