How to migrate a program with Common Controls from Visual C++ 6.0 to Visual C++ 2010 (on 64-bit machine)

1.8k Views Asked by At

I am attempting to migrate a Visual C++ 6.0 program (originally written on a Windows NT machine) to Visual C++ 2010 for use on my 64-bit Windows 7 PC. The program compiles fine but there is a runtime assertion failure which yeilds the following output in the debugger:

CoCreateInstance of OLE control {F9043C85-F6F2-101A-A3C9-08002B2F49FB} failed.

Result code: 0x80040154

Is the control is properly registered?

Warning: Resource items and Win32 Z-order lists are out of sync. Tab order may be not defined well.

Warning: CreateDlgControls failed during dialog init.

The failed assertion is on line 925 of occcont.cpp:

ASSERT(IsWindow(pTemp->m_hWnd));

I understand from http://dynamicsuser.net/forums/p/25968/140697.aspx that the Microsoft Common Dialog Control v6.0 might not be registered. I registered it with Regsrv32.exe and restarted windows but the error persists.

My goal is to tell whether this old program can work with new tools--not to actually rewrite the old program (though that will come later). Is it possible to make the old program run on my newer machine?

EDIT: Addition of the code which causes the assertion failure

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

There are 1 best solutions below

4
On
  • 0x80040154 is REGDB_E_CLASSNOTREG. That means that the class has not been registered.
  • {F9043C85-F6F2-101A-A3C9-08002B2F49FB} is the Commom Dialog Control.

So, it seems that that control is not registered. You attempted to register it but I'd guess that you registered the 64 bit version. You are likely compiling a 32 bit program and so need to register the 32 bit version.

regsvr32 C:\Windows\SysWOW64\ComDlg32.ocx

Make sure you do this whilst elevated. That said, I would expect the control to be registered out of the box.

Finally, it's 2015 now and you should not be using this control anymore. Try to wean yourself onto something more modern.

I'd also comment that there's no need for you to re-compile the program. To start with I'd concentrate on getting your existing executable to work on the new machine.