대화 상자를 표시하는 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 코드를 실행하면 모든 것이 완벽하게 작동합니다.
관리자 권한으로 작업을 시도했지만 아무 것도 변경되지 않았습니다.
어디서이 문제를 해결할 수 있습니까?
이전 버전의 Windows와의 호환성으로 실행 해 보셨습니까? 실행 파일을 마우스 오른쪽 단추로 클릭하고 호환성 탭으로 이동하십시오. 때때로 그것은 마술처럼 작동합니다. – BeemerGuy
@BeemerGuy, 예. 나는 그것을 언급하는 것을 잊었다 - 그렇습니다, 나는 호환성 모드를 시도했습니다 - 작동하지 않았습니다. – AngryHacker
VB 응용 프로그램 내에서 VB6 코드를 실행하면 오류를 재현 할 수 있습니까? 그렇다면 VB 디버거를 사용하여 더 정확하게 추적 할 수 있습니다. –