2009-07-28 2 views
1

(내가 지금 사용자로 가입하기 때문에이 메시지를 다시 게시하도록하겠습니다)문제 II

나는 방금 설치 한 비주얼 스튜디오 6 (SP5) Vista Enterprise 컴퓨터에서. 몇 가지 문제가 있었지만 문제가 없다고 생각합니다.

내 VC++ 6 응용 프로그램이 ActiveX를 호스팅하려고 할 때 문제가 발생합니다. Vista에서 rc.exe ("이 프로그램은 호환성 문제가 알려져 있음")에 대한 경고 메시지가 표시되었지만 제대로 컴파일 할 수있었습니다.

내가 디버깅 할 때 CAxDialogImpl에서 파생 된 클래스가 Create() 메서드에서 실패한다는 것을 알았습니다. 같은 응용 프로그램이 XP에서 잘 작동했습니다!

거기에 알려진 호환성 문제가 있습니까?

일부 기술 정보 : 나는 CAxDialogImpl :: Create() (여기에 NULL을 전달)에서 AtlAxCreateDialogA를 호출하고, 이는 차례대로 CreateDialogIndirectParamA를 호출하여 일반적인 예외를 throw합니다.

고마워, 에릭

PS - 1. 내 컴퓨터에 관리를 생각합니다. OS는 32 비트입니다. 2. VS6은 Vista에서는 지원되지 않지만 VS200로 마이그레이션 할 때 문제가 발생하여 선택의 여지가 없습니다.

+0

업데이트 : 내 DLL은 (내 비주얼 C++ 응용 프로그램이 실제로 DLL입니다)는 COM 응용 프로그램에서 호출 할 때 그것은 작동하지만 .Net 응용 프로그램에 의해 호출되면 실패합니다. –

답변

2

확인. 이유와 해결책을 찾았습니다.

DEP 호환성 문제 인 것 같습니다. 응용 프로그램에서 예외/메시지가 실패하지 않았으므로 찾기가 어려웠습니다.

문제는 내 dll에 사용 된 오래된 ATL 구성 요소 때문에 발생했습니다. ATL의 이전 버전은 런타임에 컴퓨터 코드를 생성 한 다음 실행 가능으로 표시되지 않은 메모리 페이지에서이 코드를 실행하려고 시도하므로 하드웨어 적용 DEP가 사용되는 경우 DEP 위반이 발생합니다.

내 XP 시스템과 Vista 시스템의 차이점은 실제로 DEP 작업에있었습니다. Vista의 DEP는 하드웨어 기반이므로 문제가 발생했습니다.

또한 동일한 DLL을 사용하고 잘 작동하는 COM 응용 프로그램이 있지만 .NET 응용 프로그램은 DEP 호환성 플래그로 만들어 졌기 때문에 실패했습니다.

해결책은 .Net 응용 프로그램에서 DEP 호환성 플래그를 제거하는 것이 었습니다.

건배, 에릭

PS - 두 개의 링크가 매우 도움이되었다 : http://support.microsoft.com/kb/948468 How to make my program DEP-compatible?

관련 문제