2012-11-05 6 views
2

Visual Studio 2012를 사용하여 기존 MFC 응용 프로그램을 빌드하고 있습니다. 응용 프로그램은 CRichEditCtrl을 상속하는 "RichEdit20A" 컨트롤과 사용자 지정 컨트롤을 사용합니다.:: AfxInitRichEdit2가 실패하고 어떻게 수정합니까?

InitInstance() 동안 응용 프로그램은 ::AfxInitRichEdit2()을 호출하며 AtlLoadSystemLibraryUsingFullPath(L"RICHED20.DLL")을 호출합니다.이 번호는 LoadLibraryExW(pszLibrary, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32)입니다. 후자 호출이 실패하고 NULL을 반환합니다. GetLastError()은 87을 반환합니다 (매개 변수가 잘못되었습니다.). 이것은 Win7 x64와 Win8 x64 모두에서 발생합니다.

Visual Studio 2012 런타임에 실패한 호출이있는 것 같습니다 (조건부 #if NTDDI_VERSION >= NTDDI_WIN8 안에 있음). Visual Studio 2008을 사용하여 응용 프로그램을 만들면 올바르게 작동합니다.

이 문제가 발생하는 이유와이 문제를 해결하는 방법을 아는 사람이 있습니까? 또는 이전로드 동작을 사용하도록 런타임을 "되돌리기"위한 방법이 있습니까?

+0

시스템에 RICHED20.DLL이 있는지 확인 했습니까? –

+0

업그레이드 전에 'WINVER'를 0x600으로 설정하십시오. VS 2012에서 새 프로젝트를 만든 경우 Windows 8을 대상으로하는 프로젝트가 끝났을 가능성이 큽니다. 'targetver.h'를 변경하십시오! – l33t

+0

@Lynn Crumbling 예, RICHED20.DLL이 존재합니다. –

답변

6

적절한 대상 Windows 버전을 선택하는 것이 매우 중요 할 수 있습니다. 명시 적으로 설정하지 않은 경우 Visual Studio에서는 가장 최신의 가장 큰 것을 대상으로합니다. VS2012 용 Windows 8은 무엇입니까?

LoadLibraryEx()에 대한 새로운 옵션 인 LOAD_LIBRARY_SEARCH_SYSTEM32 옵션이 포함되어 있습니다. Windows 8에서 사용할 수 있지만 Windows Vista, 7 또는 2008에서 사용하는 경우 security patch을 설치해야합니다.이 프로그램은 매우 중요합니다. 분명히 설치하지 않은 것입니다.

프로그램이 이전 버전이나 패치되지 않은 Windows 버전과 호환되도록하려면 대상을 변경해야합니다. 이것은 일반적으로 비교적 최근의 마법사에 의해 MFC 프로젝트가 생성되었다고 가정하면 targetver.h 헤더 파일에 의해 수행됩니다. 이처럼 수정 : 당신이 targetver.h이없는 경우

#pragma once 

// Including SDKDDKVer.h defines the highest available Windows platform. 

// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 

#define _WIN32_WINNT _WIN32_WINNT_WINXP // NOTE: added 
#include <SDKDDKVer.h> 

다음 <windows.h>의 사용법 #include 전에 어디 넣어. 원하는대로 값을 조정하십시오. XP는 현재 VS2012에서 지원되지 않지만 나중에 사용됩니다.

+0

적절한'#define _WIN32_WINNT'가 있었지만 패치가 없습니다. 후속 조치 : 스택 오버 플로우 커뮤니티에 묻는 것 외에는 그러한 패치가 필요한지 어떻게 알 수 있습니까? –

+0

MFC 코드를 읽음으로써 발견되었습니다. 모두를위한 것은 아니지만 이것이 바로 SO가 존재하는 이유입니다. –

+0

완전성을 위해 어디에서 (그리고 해당되는 경우) 어떻게 발견했는지 또는 추론했는지를 참고할 수 있습니까? –

관련 문제