如何将具有公共控件的程序从 Visual C++ 6.0 迁移到 Visual C++ 2010(在 64 位计算机上)
How to migrate a program with Common Controls from Visual C++ 6.0 to Visual C++ 2010 (on 64-bit machine)
我正在尝试将Visual C++ 6.0程序(最初编写在Windows NT机器上)迁移到Visual C++ 2010,以便在我的64位Windows 7 PC上使用。程序编译正常,但运行时断言失败,在调试器中显示以下输出:
OLE control {F9043C85-F6F2-101A-A3C9-08002B2F49FB} 的CoCreateInstance of OLE control {-F6F2-A3C9-08002B2F49FB} 失败。
结果代码:0x80040154
控件是否已正确注册?
警告: 资源项和 Win32 Z 顺序列表不同步。标签 顺序可能没有很好地定义。
警告:创建 DlgControls 在对话框初始化期间失败。
失败的断言位于occcont.cpp的第925行:
ASSERT(IsWindow(pTemp->m_hWnd));
我从 http://dynamicsuser.net/forums/p/25968/140697.aspx 了解到,Microsoft通用对话框控件v6.0可能未注册。我用Regsrv32注册了它.exe并重新启动了窗口,但错误仍然存在。
我的目标是判断这个旧程序是否可以使用新工具——而不是实际重写旧程序(尽管稍后会再说)。是否可以使旧程序在我的新机器上运行?
编辑:添加导致断言失败的代码
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}
是逗号对话框控件。
因此,该控件似乎未注册。您尝试注册它,但我猜您注册了 64 位版本。您可能正在编译 32 位程序,因此需要注册 32 位版本。
regsvr32 C:\Windows\SysWOW64\ComDlg32.ocx
确保在提升时执行此操作。也就是说,我希望控件是开箱即用的。
最后,现在是 2015 年,您不应该再使用此控件。试着让自己断奶到更现代的东西上。
我还要评论说,你没有必要重新编译程序。首先,我会专注于让您现有的可执行文件在新机器上工作。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual C++ constexpr Hints
- 为什么它不适用于Visual 2019的原因
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- visual在c++中将十进制数转换为二进制数
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual C++(VS2017)中用户定义的转换不明确
- Visual C++GC接口如何启用它以及要包含哪个库
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- visual c++,如何获取解决方案目录中的代码
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头