我正在尝试将 Visual C++ 6.0 程序(最初在 Windows NT 机器上编写)迁移到 Visual C++ 2010,以便在我的 64 位 Windows 7 PC 上使用。该程序编译正常,但运行时断言失败,在调试器中产生以下输出:
OLE 控件 {F9043C85-F6F2-101A-A3C9-08002B2F49FB} 的 CoCreateInstance 失败。
结果代码:0x80040154
控件是否正确注册?
警告:资源项和 Win32 Z 顺序列表不同步。Tab 顺序可能没有很好地定义。
警告:CreateDlgControls 在对话框初始化期间失败。
失败的断言位于 occccont.cpp 的第 925 行:
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();
...