Как перенести программу с Common Controls из Visual C ++ 6.0 в Visual C ++ 2010 (на 64-разрядной машине)

Я пытаюсь перенести программу Visual C ++ 6.0 (изначально написанную на компьютере с Windows NT) на Visual C ++ 2010 для использования на моем 64-битном ПК с Windows 7. Программа компилируется нормально, но есть ошибка утверждения во время выполнения, которая выдает следующие выходные данные в отладчике:

CoCreateInstance управления OLE {F9043C85-F6F2-101A-A3C9-08002B2F49FB}
не удалось.

Код результата: 0x80040154

Правильно ли зарегистрирован элемент управления?

Предупреждение: элементы ресурсов и списки Z-порядка Win32 не синхронизированы. табуляция
порядок может быть не определен хорошо.

Предупреждение: CreateDlgControls не удалось во время инициализации диалога.

Неудачное утверждение находится в строке 925 файла occcont.cpp:

ASSERT(IsWindow(pTemp->m_hWnd));

Я понимаю из http://dynamicsuser.net/forums/p/25968/140697.aspx что Microsoft Common Dialog Control v6.0 может быть не зарегистрирован. Я зарегистрировал его с помощью Regsrv32.exe и перезапустил Windows, но ошибка не исчезла.

Моя цель — сказать, может ли эта старая программа работать с новыми инструментами, а не переписывать старую программу (хотя это произойдет позже). Можно ли запустить старую программу на моей новой машине?

РЕДАКТИРОВАТЬ: добавление кода, который вызывает ошибку подтверждения

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

Решение

  • 0x80040154 является REGDB_E_CLASSNOTREG, Это означает, что класс не был зарегистрирован.
  • {F9043C85-F6F2-101A-A3C9-08002B2F49FB} является элементом управления Commom Dialog

Итак, похоже, что этот контроль не зарегистрирован. Вы пытались зарегистрировать его, но я предполагаю, что вы зарегистрировали 64-битную версию. Скорее всего, вы компилируете 32-битную программу и вам необходимо зарегистрировать 32-битную версию.

regsvr32 C: \ Windows \ SysWOW64 \ ComDlg32.ocx

Убедитесь, что вы делаете это во время повышения. Тем не менее, я ожидаю, что контроль будет зарегистрирован из коробки.

Наконец, сейчас 2015 год, и вам больше не следует использовать этот элемент управления. Попробуйте отучить себя от чего-то более современного.

Я бы также прокомментировал, что вам не нужно перекомпилировать программу. Для начала я бы сконцентрировался на том, чтобы заставить ваш существующий исполняемый файл работать на новой машине.

1

Другие решения


По вопросам рекламы [email protected]