2015-01-07 4 views
-1

Visual C++ 6.0 프로그램 (원래는 Windows NT 컴퓨터에서 작성)을 Visual C++ 2010으로 마이그레이션하려고합니다. 내 64 비트 Windows 7 PC에서 사용하십시오. 이 프로그램은 잘 컴파일하지만, 디버거에서 다음과 같은 출력을 yeilds 런타임 어설 션 오류가 : OLE 컨트롤 {F9043C85-F6F2-101A-A3C9-08002B2F49FB} 실패의Visual C++ 6.0에서 Visual C++ 2010 (64 비트 컴퓨터)으로 공용 컨트롤을 사용하여 프로그램을 마이그레이션하는 방법

CoCreateInstance를가.

결과 코드 : 0x80040154

컨트롤이 제대로 등록되어 있습니까?

경고 : 리소스 항목과 Win32 Z 순서 목록은 동기화되지 않습니다. Tab 주문이 잘 정의되지 않았을 수 있습니다.

경고 : 대화 상자 초기화 중에 CreateDlgControls가 실패했습니다.

실패한 주장은 occcont.cpp의 라인 925에 :

ASSERT(IsWindow(pTemp->m_hWnd)); 

내가 Microsoft 공용 대화 상자 컨트롤의 버전 6.0이 등록되지 않을 수 있음을 http://dynamicsuser.net/forums/p/25968/140697.aspx에서 이해합니다. Regsrv32.exe를 사용하여 등록하고 Windows를 다시 시작했지만 오류가 계속 발생합니다.

내 목표는이 오래된 프로그램이 새로운 도구로 작동 할 수 있는지 여부를 알려주는 것입니다. 실제로는 오래된 프로그램을 다시 작성하지는 않습니다. 이전 프로그램을 최신 컴퓨터에서 실행할 수 있습니까?

EDIT : 어설 실패

BOOL CCameraSimulationApp::InitInstance() 
{ 
    AfxEnableControlContainer(); 

#ifdef _AFXDLL 
    Enable3dControls();   // Call this when using MFC in a shared DLL 
#else 
    Enable3dControlsStatic(); // Call this when linking to MFC statically 
#endif 

    INITCOMMONCONTROLSEX InitCtrlEx; 
    InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX); 
    InitCtrlEx.dwICC = ICC_PROGRESS_CLASS; 

    if (!InitCommonControlsEx(&InitCtrlEx)) 
    { 
     printf("Common Controls failed to initialize");//debug 
    } 

    CCameraSimulationDlg dlg; 
    m_pMainWnd = &dlg; 
    int nResponse = dlg.DoModal(); 

를 발생시키는 코드 추가 ...

+1

나로부터 downvote 아니지만 어설 션 실패의 원인이되는 코드를 찾아 붙여 넣을 수 있다면 좋을 것입니다. 그렇지 않으면 대답하기가 너무 어렵습니다. 또한, 당신이 전화 : http://msdn.microsoft.com/en-us/library/windows/desktop/bb775697(v=vs.85).aspx? – SirDarius

+0

@SirDarius'CDialog :: DoModal()'은 어설 션을 발생시킵니다. 귀하의 제안을 시도하고 함수가 true를 반환하면 실제로 ActiveX 컨트롤이 아니라 내 자신의 코드로 문제가 발생한다고 생각하게됩니다. –

+0

음 ... 그냥 옆으로 : 이것은 ActiveX와는 아무런 관련이 없습니다. 조금도. – specializt

답변

1
  • 0x80040154REGDB_E_CLASSNOTREG이다. 즉, 수업이 등록되지 않았다는 의미입니다.
  • {F9043C85-F6F2-101A-A3C9-08002B2F49FB}은 Commom Dialog Control입니다.

따라서 컨트롤이 등록되지 않은 것처럼 보입니다. 등록을 시도했지만 64 비트 버전을 등록했다고 추측 할 수 있습니다. 32 비트 프로그램을 컴파일 할 가능성이 높으므로 32 비트 버전을 등록해야합니다.

 
regsvr32 C:\Windows\SysWOW64\ComDlg32.ocx 

승격하면서 확인하십시오. 즉 컨트롤이 상자 밖으로 등록 될 것으로 기대됩니다.

마지막으로 지금은 2015이며이 컨트롤을 더 이상 사용하지 않아야합니다. 좀 더 현대적인 것에 자신을 넣으려고 노력하십시오.

또한 프로그램을 다시 컴파일 할 필요가 없음을 말씀드립니다. 우선 기존 실행 파일을 새 컴퓨터에서 사용하도록하는 것에 집중하겠습니다.

+0

64 비트 프로그램 인 matlab dll도 64 비트이기 때문에 실제로 실행하려고했습니다. 에 관계없이, 나는'C : \ Windows \ SysWOW64 \ ComDlg32.ocx'와'C : \ Windows \ System32 \ ComDlg32.ocx'를 상승시키면서 등록하려고 시도했지만 여전히 같은 주장을 보입니다. 컨트롤을 완전히 다시 작성하고 싶습니다만, 불행히도 여기에서 허용되는 범위를 벗어납니다. 또한 이전 실행 파일은 새 컴퓨터에서 제대로 작동합니다. –

+0

이전 실행 파일이 정상적으로 작동하면 컨트롤이 아마도 등록됩니다. 어떤 경우에는 문제가 코드에 있어야하며 코드를 컴파일하는 방법이 필요합니다. 세부 사항은 없습니다. –

+0

어설 션 오류는'CDialog :: DoModal()'함수 호출로 인해 발생합니다. 어떤 용도로 사용되는 것이거나 상황을 설명하는 데 도움이 될만한 다른 세부 정보가 있습니까? 내 단점에 대해 사과 드리며 - C++ GUI 프로그램을 처음 사용하는 것입니다. –