0
    char desktopPath[MAX_PATH];
    HRESULT r = SHGetFolderPath(NULL, CSIDL_DESKTOP, NULL, 0, desktopPath);
    if (r != S_OK) {
        throw XArch(new XArchEvalWindows());
    }
    m_desktopPath = CString(desktopPath);

とても奇妙です。このコードは、リリース モードとデバッグ モードの両方で VS2010 で動作します。配布してアプリケーションを実行すると、「指定されたファイルが見つかりません」というエラーが表示されます。さらに奇妙なのは、同僚が自分のマシンで同じアプリケーションを実行し、それが機能することです。

MSDN では、SHGetFolderPath は非推奨であると書かれているため、SHGetKnownFolderPath を使用しようとしました。同じ状況です。

    PWSTR desktopPathW = 0;

    HRESULT hr = SHGetKnownFolderPath(FOLDERID_Desktop, 0, NULL, &desktopPathW);
    if (!SUCCEEDED(hr)) {
        throw XArch(new XArchEvalWindows());
    }
    CoTaskMemFree(static_cast<void*>(desktopPathW));

何が起こっているかについて何か考えはありますか?または、これをどのようにデバッグすると思いますか?

前もって感謝します。ジェリー

4

1 に答える 1

2

コメントS_OKは、 が唯一の成功結果であると明示的に述べており、エラー コードには S_FALSEE_FAILおよびが含まれE_INVALIDARGます。これらの 3 つだけがエラー コードであると誤って想定しています。

于 2013-10-25T11:12:17.557 に答える