VC6工程迁移到VC2008 SP1中,使用MFC 9.0静态链接后运行错误的解决办法

解决VC++6.0在Windows 10/11上运行错误的系统性方案 在软件开发和系统维护中,向后兼容性是确保老旧软件能在现代操作系统上运行的关键技术挑战。其核心原理涉及操作系统架构的演进,如安全模型、API接口和运行时环境的变更。解决这类问题的技术价值在于保护历史代码资产、维持关键业务系统运行,并降低迁移成本。典型的应用场景包括维护遗留的MFC项目、运行经典的教学案例或工业控制软件。本文聚焦于一个具体而普遍的案例:如何让诞生于1998年的经典开发环境Visual C++ 6.0在Windows 10/11上稳定工作。通过分析由**Windows Installer**服务更 阅读详情

微软前不久发布了Visual Studio 2008 Service Pack 1,其中包含了据说是有BCGSoft提供的一些新类,可以直接使用Office 2007/Visual Studio 2005的界面,闻之大喜,终于不用再眼馋BCGControlBar和Xtreme Toolkit这些付费的库了,为了获得VC6的界面,俺还在用自己4年前写的库:)

花了半天时间把手上的工程由VC6迁移到了VC2008,使用动态链接到MFC,一切正常(可惜在中文环境下字体很难看,这个貌似是一个BCG Library的bug,回头等有空再来解决它)。考虑到客户机上可能没有MFC 9.0的DLL,于是改成了静态链接,可惜编译链接没问题,运行时却出错了。

出错的位置位于AfxTabCtrl.cpp第1395行,一个ENSURE宏断言错误,看上去是找不到一个字符串资源。这种错误最为头疼,仔细检查了compiler和linker的设置,使用的库版本,没有发现错误,只好使用土办法“最小系统法”,用VC6生成一个MDI工程,转换到VC2008,加入一个CDockablePane派生的窗口,使用静态链接……果然同样的错误,接着生成了一个空的VS2005 like的空项目,然后从代码入手,一一对比检查,还是没有找到错误的地方,到底问题出在哪呢?忽然想到,或许应该从最原始的地方入手,既然是找不到IDS_AFXBARRES_CLOSEBAR定义的字符串,那么就找找看它在哪定义的,在atlmfc目录下搜索,这个ID定义在afxribbonres.h而存放于afxribbon.rc中。原来问题就在工程的rc文件中。VC2008生成的工程,在其rc文件中有如下代码:

    #if !defined(_AFXDLL)
    #include "afxribbon.rc"  // MFC ribbon and control bar resources
    #endif
说明在静态链接的时候,应该手动包含此资源。VC6生成的rc文件中自然是没有这一动作的了,于是打开rc文件,加上这一段代码,顺利通过。

VC++ MFC实战:企业级客户资源管理系统开发全解析 桌面应用开发是软件工程中的重要领域,尤其在需要高独立性、本地化部署和直接硬件交互的场景中。其核心原理在于利用操作系统提供的原生API和框架,构建不依赖网络环境、运行高效且部署简便的应用程序。在Windows平台上,Visual C++(VC++)配合MFC(Microsoft Foundation Classes)框架,曾是构建这类应用的经典技术组合,其价值在于能生成依赖极少的原生可执行文件,并提供了文档/视图架构、消息映射等成熟机制,极大地加速了典型桌面应用的开发流程。这种技术方案广泛应用于工业控制、遗留 阅读详情

相关推荐

WTL嵌入式开发实战:Windows CE轻量UI设计与优化

WTL(Windows Template Library)是一种基于ATL的C++模板库,专为直接操控Win32 API而生,其核心原理是将运行时开销转移至编译期,通过静态消息映射、零虚函数调用和无运行时依赖实现极致轻量。在资源受限环境如Windows CE系统中,WTL展现出远超MFC和.NET Compact Framework的内存效率、启动速度与实时响应能力,尤其适用于工业HMI、医疗PDA、车载终端等对确定性性能有严苛要求的嵌入式UI场景。本文深入解析WTL在CE 5.0平台下的工程落地路径,涵盖

ciyinzhi8788的博客 416

VS2008提示无法打开包括文件:“afxcontrolbars.h”解决办法

我发生过几次这个问题,都是以前用了vs2008SP1写的程序,现在用没有SP1的vs2008编译引起的。解决它的根本方法当然就是装SP1,但是这个SP1装起来需要1个钟头,很麻烦。而且装上要耗掉1G多硬盘空间。我的程序是对话框程序,和那些高端的controlbar根本没什么关系,我猜大概改源代码也可以。后来我尝试了一下,直接在stdafx.h中改了一处,把#include <afxcontr...

weixin_30426879的博客 505

MFC之CBCGPDockingControlBar 单文档停靠栏菜单国际化(实现中英文切换)

对于单文档、多文档框架来说,其大部分都用到Dock功能,有的时候我们需要实现界面国际化,但是CBCGPDockingControlBar类提供的弹出式菜单在工程里面找不到,所以就没法通过使用"插入副本"这一功能实现菜单的国际化。 而且在网上也很难找到这一类的解决办法,找了几天没找到解决方法 ,唯一找到一个相关的主题https://bbs.csdn.net/to...

Ilson_的博客 1945

MFC程序编译时VS2008提示无法打开包含文件<afxcontrolbars.h>

这个头文件包含在“stdafx.h”中 造成这个问题的主要原因是这个工程原来可能是在打了SP1补丁的VS2008下创建的,SP1是微软08年发布的一个补丁,用于改善VS的一些特性。可能是SP1后加入了这个头文件,用于提供对功能区和控制条的MFC支持 #include     // MFC support for ribbons and control bars 一种解决方法就是安装SP1以

白话机器学习 2345

MFC 之 TabCtrl

MFC中TabCtrl用法的示例工程,很多朋友觉得这个难用, 其实这是先入为主的想法,TabCtrl还是不难用的, 而且可重用性强. 用dialog指针来管理Page,更方便 [断空原创]

【VC++】程序运行到if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)异常的解决方案

问题描述: Debug工程属性中设置 “C/C++”-->“代码生成”:运行库 “多线程调试(/MTd)” Debug工程属性中设置 “C/C++”-->"预处理器":预处理器定义中,取消_AFXDLL的定义。 Debug工程属性中设置“常规”-->MFC的使用:设置为“在共享DLL中使用MFC”。 编译通过,但运行时会在窗口建立时出现“Debug Assertion Failed!”异常

晨曦夕辰 2329

Cadence元件库介绍

Cadence安装完之后,在安装目录下,会有默认自带的一些常用元件库。例如,我的Candece安装目录为: D:\Cadence\Cadence_SPB_17.2-2016 元件库所在目录为: D:\Cadence\Cadence_SPB_17.2-2016\tools\capture\library 各个元件库对应的内容如下: AMPLIFIER.OLB 共 182 个零件,存放模拟放大器 IC,如 CA3280,TL027C,EL4093 等。 ARITHMETIC.OLB 共 182 个零件,存放

年少时的棉花糖 1万+

CDockablePane标题栏菜单源码分析

【代码】CDockablePane标题栏菜单源码分析。

sannianji的专栏 589

CANdb++ Editor实战:5步搞定DBC文件信号布局与字节对齐(附常见错误排查)

本文详细介绍了使用CANdb++ Editor进行DBC文件信号布局与字节对齐的实战方法。通过五步法,深入解析Intel与Motorola字节序差异、跨字节信号布局规则,并借助Layout视图等工具,帮助工程师高效解决信号错位、数据解析错误等常见问题,确保CAN网络通信的准确性与可靠性。

solidity8miner的博客 695

测站坐标系统 -- 东北天(ENU)坐标系、站心坐标系

测站坐标系统以观测站(或地面上某一个观测点为中心建立坐标系统,将这类坐标系称为测站坐标系统。测站坐标系通常以用户所在的位置点P为坐标原点三个坐标轴分别是相互垂直的东向北向和天向,因而测站坐标系又称为东北天(ENU)坐标系。由于测站坐标系以站心为坐标原点,因此也称为站心坐标系。如图所示,测站坐标系的天向与大地坐标系(LLA经纬度坐标系)在此点的高程方向一致。测站坐标系固定在地球上,本质上是一种地固坐标系。(1)以站心为坐标原点。(2)Z轴与站心点的椭球法线重合,向上为正。

qq_43381998的博客 1万+

MFC CMFCTabCtrl 笔记

控件手动创建过程 BOOL Create(Style style, const RECT& rect, CWnd* pParentWnd, UINT nID, Location location = LOCATION_BOTTOM, BOOL bCloseBtn = FALSE); style: STYLE_3D = 0, STYLE_FLAT = 1, STYLE_FLAT_SHARED_HORZ_SCR

蒙蒙plus 1256

读《认知科学导论》(萨伽德) 总结

1. 作者的写作思路 本书是建立在对心智的理解采用表征与计算的方式。对心智表征-计算的理解方式是与计算机的本质相联系。计算机本质上是一个符号系统,符号系统包含两个部分,一个是符号,另一个是建立在符号上的操作。对心智采用表征-计算的方式理解,很容易与计算机建立起类比关系。同时人们在探索人工智能领域采用表征-计算方式已经取得了无数辉煌的成就,故表征-计算式现在研究的主流方法。 本书的有两个部分组成

xiaoqiangXX的专栏 3450

解决vs2008写的程序迁移到其他机器运行的问题

<br />转自:http://www.cnblogs.com/wondering/archive/2009/08/29/1556392.html<br /> <br />VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这个错误,那么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的mani

tangye711ndcs的专栏 1434

【全开源】旅游系统源码(Uniapp+FastAdmin+ThinkPHP)

通过源码的灵活配置和定制开发,我们可以根据旅游企业的实际需求,快速构建出符合其业务特点的旅游系统。旅游系统源码,作为这一变革的基石,为旅游业的数字化转型提供了强有力的支撑。通过深入研究和应用旅游系统源码,我们能够构建出更加智能、便捷、个性化的旅游服务平台,满足游客日益增长的旅游需求。国际化发展:随着全球化的深入发展,旅游系统源码也将迎来国际化的发展机遇,为国内外游客提供更加便捷、高效的旅游服务。跨界融合:旅游系统源码将与更多领域进行跨界融合,如与交通、餐饮、购物等行业的结合,为游客提供更加丰富的旅游体验。

2401_84413757的博客 2154

[ 人力资源面试篇 ] HR 面试题分析详解大集合,看完直怼面试官(二)

那么在这个系列的文章中,我们聊到 HR 面谈什么?并且总结了五十个常见的人力资源面试题,在这里分享给大家。

qq_51577576的博客 1380

工业上位机开发实战:VS2008与VC++在存量设备维护中的核心价值

在工业自动化领域,上位机软件作为连接操作人员与底层控制设备的关键枢纽,承担着数据采集、监控、控制与可视化等核心任务。其技术实现通常基于成熟的开发框架,通过高效的编程语言与底层系统交互,确保实时性与稳定性。在工业现场,大量存量设备的上位机软件基于经典技术栈开发,这些系统经过长期运行考验,但面临硬件老化与功能扩展需求。因此,掌握相关开发与维护技术,对于保障生产连续性、降低升级成本具有重要的工程实践价值。本文聚焦于工业上位机开发中的通信模块与数据管理,探讨如何在特定技术环境下实现稳定可靠的系统集成与维护。

353

华为OD机考2025C卷 - 高矮个子排队(Java & Python& JS & C++ & C)

华为OD机考2025C卷 - 高矮个子排队。提供在线OJ刷题。Java、C++、Python、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1683

VC++ 6.0 现代系统安装与兼容性配置实战指南

在软件开发领域,集成开发环境(IDE)是程序员的核心工具,其版本迭代与系统兼容性直接影响开发效率。Visual C++ 6.0(VC6)作为一款经典的C++开发工具,其核心原理基于MFC框架和Windows API,为Windows桌面应用开发提供了稳定基础。尽管现代IDE功能丰富,但VC6在工业控制、嵌入式上位机及遗留系统维护等特定场景中,因其轻量、稳定和对老旧代码的完美支持,仍具有不可替代的技术价值。本文聚焦于解决VC6在现代操作系统(如Windows 10/11)上的实际部署难题,涵盖从获取纯净安装包

weixin_30448603的博客 336

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC++6.0在现代Windows系统上的兼容性部署与配置实战指南

在软件工程领域,集成开发环境(IDE)和编译器工具链的兼容性维护是遗留系统开发与教学实践中的常见挑战。其核心原理在于,随着操作系统迭代更新,底层API和运行时库的变更可能导致旧版开发工具出现编译、链接或运行时错误。解决这类问题的技术价值在于,能够确保历史代码库的持续可构建性,为特定行业(如嵌入式、工控)的硬件驱动开发提供稳定的编译环境,并支持计算机教育中对经典技术栈(如Win32 API、MFC框架)的原生学习体验。典型的应用场景包括高校C/C++课程实验、遗留桌面应用维护,以及需要特定版本编译器产出的嵌入

weixin_34033624的博客 335

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Windows程序视觉样式实战:从清单文件到高DPI适配的完整指南

在Windows桌面应用开发中,视觉样式是实现程序界面与操作系统主题保持一致的核心技术。其原理是通过清单文件声明依赖通用控件库6.0及以上版本,并正确初始化控件库,从而调用系统主题服务绘制控件。这项技术的价值在于能以极低成本提升遗留软件在现代高DPI显示器上的显示效果,并统一跨Windows版本的用户体验。典型应用场景包括工业控制、医疗设备等长期维护的MFC/Win32应用现代化改造,以及需要兼容Windows XP/7等旧系统的行业软件开发。本文以解决常见的界面模糊、控件样式失效等实际问题为切入点,深入解

weixin_34133829的博客 333

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VS2017安装实战指南:工业控制与遗留系统开发必备

Visual Studio 2017并非过时工具,而是面向Windows 7/8.1、.NET Framework 4.6.1–4.7.2及MSVC v141工具链的稳定开发环境。其核心价值在于对工控SDK、PLC通信库、医疗设备驱动等国产嵌入式生态的官方兼容性保障,尤其适配Windows 10 LTSC 2019、Server 2016等锁版系统。在老旧硬件调试、学校机房部署、国企内网维护等离线或受限场景中,VS2017凭借低系统依赖、高确定性表现成为不可替代的工程选择。本文聚焦真实产线级安装痛点,覆盖离

clt3617的博客 376

CMFCColorDialog弹不出来或者CMFCColorButton的Other按钮无效

VS2008(SP1)在静态编译的程序中,可能VS2010也是一样. CMFCColorDialog弹不出来或者CMFCColorButton的Other按钮无效(其实本人目前发现这些新特性控件中CMFCEditBrowseCtrl控件的图标也是, CMFCTabCtrl控件创建成CMFCTabCtrl::STYLE_FLAT式样时也需要加载ribbon资源, 不然那些箭头不能显示),这时需要

天上的猩猩的专栏 1642

将ribbon主题应用到对话框中去(转载)

原帖地址:这里 找了N久,终于在无幻大神这里找到了将ribbon sdi主题应用到对话框程序中的方法,好像这是一个开源的项目,google code里有。记录下: 1、下载网页里的资源KofPack0.1,vs里打开工程文件KofFeaturePack; 2、菜单生成-批生成-全部选中-确定 3、将文件夹下lib  include文件夹拷贝到自己的工程目录下,注意是在工程文件sln那个层次

小猿一枚的专栏 2781
上一篇: [ZT from MSDN]提高时间关键代码的技巧
下一篇: MFC 9.0新界面字体的美化
会思考的草
博客等级 码龄25年 208粉丝 55原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值