ダイアログ初期表示

[戻る]
serio 2002/07/12(金) 18:17:00
初めまして。
serioと申します。

WinNT、VC++6.0、SP5で開発しております。

私は今ダイアログの初期表示で、ネットワークコンピュータのコンピュータまでは取得出来てい
ます。しかし、そのコンピュータを指定して表示する事が出来ません。
四日間くらい悩んでいます。

下にソースを載せますので、回答をお願いします。

調べた範囲では

iLength = ::WideCharToMultiByte(CP_OEMCP, WC_DEFAULTCHAR,
            p_pStrret->pOleStr, -1, NULL, 0, NULL, NULL);
の辺りが怪しいのでは?と思っています。
何卒お願いします。

LPITEMIDLIST CFile2Dlg::GetItemIDList( CString p_cFileStr )
{
    if( p_cFileStr.IsEmpty() )
        return NULL;

    LPITEMIDLIST pIDL;
    LPSHELLFOLDER pDesktopFolder; 

    if( ::SHGetDesktopFolder( &pDesktopFolder ) != NOERROR )
        return NULL;

    OLECHAR       ochPath[MAX_PATH];
    ULONG         chEaten;    //文字列のサイズを受け取ります。
    ULONG         dwAttributes;    //属性を受け取ります。
    HRESULT       hRes;

    // これをしないとインターフェイスはダメなのです。
    ::MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, p_cFileStr, -1, 
ochPath, MAX_PATH );

    // 実際にITEMIDLISTを取得します。
    hRes = pDesktopFolder->ParseDisplayName( NULL, NULL, ochPath, 
&chEaten, &pIDL, &dwAttributes);
    
    if( hRes != NOERROR )
        pIDL = NULL;

    pDesktopFolder->Release();

    return pIDL;
}

とおりすがり 2002/07/12(金) 20:18:53
>iLength = ::WideCharToMultiByte(CP_OEMCP, WC_DEFAULTCHAR,
>            p_pStrret->pOleStr, -1, NULL, 0, NULL, NULL);
>の辺りが怪しいのでは?と思っています。

その辺りを載せましょう。
なんのことか分かりません。

wood 2002/07/12(金) 22:11:15
ダイアログ初期表示とどこが関係あるのですか
>私は今ダイアログの初期表示で、ネットワークコンピュータのコンピュータまでは取得出来て>ます。しかし、そのコンピュータを指定して表示する事が出来ません。

何を表示できないの?
何かを取得できないの間違いではないですか?
(フォルダ リストとか)

相手が共有化されていないとか、ログイン可能になっていないとか
この辺は、大丈夫なのですか

とおりすがり さんがご指摘のとおり
>LPITEMIDLIST CFile2Dlg::GetItemIDList( CString p_cFileStr )
の中にはそれらしいコーディングありませんけど、どこのことが怪しいんでしょうか?

serio 2002/07/16(火) 09:05:58
[[解決]]
説明不足、説明下手で申し訳ありませんでした。

iLength = ::WideCharToMultiByte(CP_OEMCP, WC_DEFAULTCHAR,
            p_pStrret->pOleStr, -1, NULL, 0, NULL, NULL);

で、iLength = 0 の値が返って来ていたので、おかしいのでは?と思った次第です。

二番目の引数を“WC_COMPOSITECHECK”に変えたら上手く行きました。

WC_DEFAULTCHAR 変換時、例外を既定の文字に置き換えます。 
WC_COMPOSITECHECK 合成文字を構成済み文字に変換します。

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