Windows 7 64 비트 및 Visual Studio C++ 2017 커뮤니티를 사용하고 있습니다. 내가 IFileOpenDialog
를 사용하여 Windows 파일 열기 대화 상자를 만들기 위해 노력하고 있지만, 프로그램이 종료 할 때 나는이 두 가지 액세스 위반 오류가 계속 :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 포함), 내 원래의 프로젝트에 오류가 사라지지 않을 것 같아 보이는 확인했다.
왜 이런 일이 발생하는지 알면 누구나 도움을받을 수 있습니다.
또한이 프로그램이 실행되는 것을 방해하지 않는다는 점에 유의하십시오. 나는 그것을 제거하고 싶습니다.
잘 모르는 코드로 인해 흔하게 발생하는 것은 아닙니다. 프로세스에로드되는 셸 확장은 거기에 많은 나쁜 것들이 있으며 프로그래머의 Win7 시스템에는 뭉툭 해지는 많은 시간이있었습니다. 도움을 얻으려면 스택 추적을 표시해야합니다. –
첫 번째 예외입니까, 두 번째 예외입니까? 첫 번째 예외 일 경우 무시하십시오. 누군가 그것을 키웠고 누군가 그것을 처리했습니다. 계속 전진해라. 누군가가 망 쳤어. 다른 누군가가 망쳐 버릴 준비가되어 있었어. – IInspectable