当前位置: 首页 > news >正文

vc6代码转到VS8以后的CString::m_pchData undefined 的解决办法

如果你问我软件开发有什么经验的话,那么我的一条经验就是:尽可能设想多种解决方案,在多种解决方案中选择一种代价较少的最优解决方案。比如今天解决了一个问题便是这条经验的一个证明。今天我将一个VC 6的工程转为VS 2008工程,在编译时遇到了问题,原因是里面用到了一个开源字符串类CStringEx,它派生自CString。CString在VC 6的实现中有一个数据成员m_pchData,在CStringEx类中自然也用到了这个数据成员。但在VS 2008中的CString的实现完全没有了m_pchData这个数据成员。VS 2008中的CString实际叫CStringT。因此在编译工程时自然而然遭遇到m_pchData未定义的错误。

因为这个工程必须用到CStringEx类,而CStringEx类的多处地方都用到了m_pchData这个成员。一开始我不知道如何想办法替代m_pchData(我大致能猜到它是表示字符串的首地址),直接的做法是自己仿照VC 6中的CString类实现一个字符串基类,然后将CStringEx类派生自该类。但是一看VC 6的CString类的实现,感觉这个解决办法代价较大,因为要用到VC底层的太多的宏和基类。虽说这个办法也能解决问题,但我想应该不是最优解决办法。我想到既然它是开源代码,在VC 6下实现,那么如果别人把它在VC 6以上的版本上编译,也必然会遇到问题,这样上网搜索说不定能找到别人提到的解决办法。于是我在google上输入:CStringEx进行搜索,果然找到一条有用的资料:

I don’t like the idea of using #define to fool the compiler – it seems to me like a hack that could easily bite you in the a$ later on down the road. i’m using VS8. so to fix CStringEx, i replaced all 22 instances of “m_pchData” with (LPTSTR)GetString(). there were three exceptions in the FindReplaceNoCase() function where i needed to replace something like sLowerThis.m_pchData with (LPTSTR)sLowerThis.GetString(). (same for sLowerSub) after i did that, my CStringEx class was happy once again 😉

按上面说的一试,编译通过。因此在解决问题时首先应设想尽可能多的解决方法,分析各种方法的潜在风险,选择最优的解决办法。

相关文章:

  • ERROR in Template execution failed: ReferenceError: process is not defined
  • Failed to mount component: template or render function not defined.
  • electron-builder依赖包下载失败(winCodeSign)
  • Windows中Neo4j搭建及安装
  • dos下筛选字符串的命令/windows下grep替代命令
  • Django框架
  • pip查看包的安装路径
  • ImportError: No module named django.core.management
  • python3项目打包成exe可执行程序
  • Nodejs 中文字符gb2312乱码问题
  • 胖客户端与瘦客户端概念与区别
  • 云计算导论 # 1 云计算概述:起源、概念、发展现状、商业模式、架构与应用
  • 云计算导论 # 2 云服务:概述、体系简介、类型及应用与部署模型
  • 云计算导论 # 3 云存储技术:概念、结构模型、关键技术、分布式数据存储、常见存储结构、应用与问题
  • 云计算导论 # 4 虚拟化
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【mysql】环境安装、服务启动、密码设置
  • 07.Android之多媒体问题
  • HTML-表单
  • httpie使用详解
  • php中curl和soap方式请求服务超时问题
  • Python打包系统简单入门
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 闭包--闭包之tab栏切换(四)
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于游标的分页接口实现
  • 记一次和乔布斯合作最难忘的经历
  • 聊聊hikari连接池的leakDetectionThreshold
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 批量截取pdf文件
  • 如何设计一个比特币钱包服务
  • 深度学习在携程攻略社区的应用
  • 手机app有了短信验证码还有没必要有图片验证码?
  • Hibernate主键生成策略及选择
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #{} 和 ${}区别
  • #HarmonyOS:基础语法
  • (7)STL算法之交换赋值
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (篇九)MySQL常用内置函数
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)德国人的记事本
  • .describe() python_Python-Win32com-Excel
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net的DataSet直接与SQL2005交互
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .net中生成excel后调整宽度