2010-11-19 5 views
1

대화 상자를 표시하는 VB6 ActiveX DLL의 메서드를 호출하는 .NET 3.5 winforms 응용 프로그램이 있습니다. 모든 것이 거의 10 년 동안 잘 작동했습니다 (Windows XP에서 .NET 1.1 응용 프로그램, 처음에는 2.0, 3.5, 모두). 이제 고객이 윈도우 7으로 업그레이드했다고, 내가 호출의 System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt..NET/VB6 응용 프로그램이 Windows 7에서 실행되지 않습니다.

구조를 경험하고는이 같다 : VB6Object 클래스의

.NET 코드

try { 
    VB6Object obj = new VB6Object(); 
    obj.DoStuff(); 
} 
catch (Exception ex) { // handle } 

VB6 코드

Public Sub DoStuff() 
    on error goto errHandle 
    RetrieveData(); 

    Call frmPopup.Show(vbModal) 

exitPoint: 
    exit sub 
errHandle: 
    ' handle error 
End Sub 

문제는 VB6 코드에서 시작됩니다. 이 줄에 : Call frmPopup.Show(vbModal). 오류는 .NET 코드로 전달됩니다 (VB6 코드의 오류 처리기는 완전히 무시됩니다). 여기서 오류를 처리합니다. 나는 문제가 frmPopup의 Load 이벤트일지도 모른다고 생각했지만, 코드는 Load 이벤트에 도달하지 못했다.

재미있는 부분은 두 번째로 전화를 걸었지만 전혀 실패하지 않지만 양식에 제 3 자 그리드 (ActiveX DevExpress Quantum Grid)가 없으므로 그리드가 아닐 것이라고 가정하고 있습니다. Windows 7과 어떻게 든 호환됩니다.

VB6 ActiveX DLL은 단순히 EXE 또는 VS2008 IDE에서 응용 프로그램을 실행하면 설명 된 모든 것이 발생합니다. COM 간접 지정을 사용하고 IDE에서 VB6 코드를 실행하면 모든 것이 완벽하게 작동합니다.

관리자 권한으로 작업을 시도했지만 아무 것도 변경되지 않았습니다.

어디서이 문제를 해결할 수 있습니까?

+0

이전 버전의 Windows와의 호환성으로 실행 해 보셨습니까? 실행 파일을 마우스 오른쪽 단추로 클릭하고 호환성 탭으로 이동하십시오. 때때로 그것은 마술처럼 작동합니다. – BeemerGuy

+0

@BeemerGuy, 예. 나는 그것을 언급하는 것을 잊었다 - 그렇습니다, 나는 호환성 모드를 시도했습니다 - 작동하지 않았습니다. – AngryHacker

+0

VB 응용 프로그램 내에서 VB6 코드를 실행하면 오류를 재현 할 수 있습니까? 그렇다면 VB 디버거를 사용하여 더 정확하게 추적 할 수 있습니다. –

답변

3

DEP를 끕니다. 이전 Ax 컨트롤은 아무도 NX 플래그를 설정할 수없는 펑키 서브 클래 싱 썽크 (ATL/MFC 이외)를 사용하는 경향이 있습니다.

+0

Dang, 당신이 전화했습니다. 지금 뭐야? 이 문제를 해결하는 쉬운 방법이 있습니까? 아니면 10 년 된 그리드를 다른 10 년 된 그리드로 교체할까요? – AngryHacker

2

특히 64 비트 시스템에서 실행하는 경우 anyCPU 대신 x86 대상에 맞게 컴파일해야합니다. 64 비트 Windows 7 시스템에서 이전 32 비트 DLL과 함께 anyCPU를 사용하는 경우 충돌이 발생하며 이전 IBM 설명서를 인용하면 "결과는 예측할 수 없습니다."

+0

결과는 꽤 예측 가능합니다. 64 비트 Windows 시스템의 AnyCPU는 64 비트 프로세스를 만들고 32 비트 DLL은로드되지 않습니다. 32 비트 DLL의 시대는 전혀 문제가되지 않습니다. –

+0

참이지만 오류 메시지는 매우 가변적 일 수 있습니다. – xpda

+0

Win7은이 경우 32 비트이므로 문제가되지 않습니다. – AngryHacker

관련 문제