2017-12-31 126 views
-1

私はWindows 7 64ビットおよびVisual Studio C++ 2017コミュニティを使用しています。私はIFileOpenDialogを使用してWindowsのファイルを開くダイアログを作成しようとしていますが、私はプログラムが終了したときに、これらの2つのアクセス違反エラーを得続ける:IFileOpenDialogアクセス違反

Exception thrown at 0x00000000771ED1CB (ntdll.dll) in p.exe: 0xC0000005: Access violation reading location 0x0000000000000074. 

Exception thrown at 0x00000000771DDC9D (ntdll.dll) in p.exe: 0xC0000005: Access violation reading location 0x0000000000000074. 

アクセス違反をデバッグするための試みで、私はすべてをコメントアウトし、コードをコピーMicrosoft's online exampleからですが、エラーは消えません。それはpFileOpen->Show(NULL);呼び出しによって引き起こされたようです。しかし、私は新しいプロジェクトを作成し、同じコードを入れてしまったので、うまくいきました。

#include <windows.h> 
#include <shobjidl.h> 

int main() 
{ 
    HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
     COINIT_DISABLE_OLE1DDE); 
    if (SUCCEEDED(hr)) 
    { 
     IFileOpenDialog *pFileOpen; 

     // Create the FileOpenDialog object. 
     hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, 
       IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen)); 

     if (SUCCEEDED(hr)) 
     { 
      // Show the Open dialog box. 
      hr = pFileOpen->Show(NULL); <-------**Culprit** 

      // Get the file name from the dialog box. 
      if (SUCCEEDED(hr)) 
      { 
       IShellItem *pItem; 
       hr = pFileOpen->GetResult(&pItem); 
       if (SUCCEEDED(hr)) 
       { 
        PWSTR pszFilePath; 
        hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath); 

        // Display the file name to the user. 
        if (SUCCEEDED(hr)) 
        { 
         MessageBox(NULL, pszFilePath, L"File Path", MB_OK); 
         CoTaskMemFree(pszFilePath); 
        } 
        pItem->Release(); 
       } 
      } 
      pFileOpen->Release(); 
     } 
     CoUninitialize(); 
    } 
    return 0; 
} 

だから、私は両方のプロジェクトのプロパティページで確認私の元のプロジェクトがGLFWとGLEWライブラリがリンクされていたので、彼らが非難していたので、多分、これはのような例が見えたものです。一度私はそれらを削除し、両方のプロパティページ(例えば、彼らは同じlibsを含んでいた)同じ見えたことを確認し、私の元のプロジェクトのエラーは消えないだろう。

なぜこのようなことが起こっているのかご存知の方は、助けてください。

また、これはプログラムの実行を妨げるものではありませんが、私はそれを取り除きたいと思います。

+2

これはよく知らないコードによって引き起こされることはめったにありません。あなたのプロセスにロードされるシェル拡張はそこに悪いものがたくさんあり、プログラマーのWin7マシンには亀裂が蓄積するのに多くの時間がありました。スタックトレースを表示してヘルプを入手する必要があります。 –

+2

これは最初の例外か2度目の例外ですか?最初の例外であれば無視してください。誰かがそれを調達し、誰かがそれを処理した。単に移動してください。誰か他の人のために準備ができていた。 – IInspectable

答えて

-2

win32グループのdebug-> windows-> exceptionの設定で0xc0000005例外がチェックされていますか?私はそれがチェックされていれば、あなたが描写した行動を得るだけです。特に、コールスタックを見ると、例外はValidateTreeItemにあります。 0xC0000005が有効になっているブレークオンスローがある場合は、その動作を取得しない方法はわかりません。