Я пытаюсь перенести программу 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();
…
0x80040154
является REGDB_E_CLASSNOTREG
, Это означает, что класс не был зарегистрирован.{F9043C85-F6F2-101A-A3C9-08002B2F49FB}
является элементом управления Commom DialogИтак, похоже, что этот контроль не зарегистрирован. Вы пытались зарегистрировать его, но я предполагаю, что вы зарегистрировали 64-битную версию. Скорее всего, вы компилируете 32-битную программу и вам необходимо зарегистрировать 32-битную версию.
regsvr32 C: \ Windows \ SysWOW64 \ ComDlg32.ocx
Убедитесь, что вы делаете это во время повышения. Тем не менее, я ожидаю, что контроль будет зарегистрирован из коробки.
Наконец, сейчас 2015 год, и вам больше не следует использовать этот элемент управления. Попробуйте отучить себя от чего-то более современного.
Я бы также прокомментировал, что вам не нужно перекомпилировать программу. Для начала я бы сконцентрировался на том, чтобы заставить ваш существующий исполняемый файл работать на новой машине.