vc6代码转到VS8以后的CString::m_pchData undefined 的解决办法
2018-01-03 17:02
423 查看
如果你问我软件开发有什么经验的话,那么我的一条经验就是:尽可能设想多种解决方案,在多种解决方案中选择一种代价较少的最优解决方案。比如今天解决了一个问题便是这条经验的一个证明。今天我将一个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 ;-)
按上面说的一试,编译通过。因此在解决问题时首先应设想尽可能多的解决方法,分析各种方法的潜在风险,选择最优的解决办法。
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 ;-)
按上面说的一试,编译通过。因此在解决问题时首先应设想尽可能多的解决方法,分析各种方法的潜在风险,选择最优的解决办法。
相关文章推荐
- vc6代码转到VS8以后的CString::m_pchData undefined 的解决办法
- VC2005:无法执行添加/移除操作,因为代码元素是只读的....多个解决办法
- VS 2010 复制代码到word出现乱码解决办法
- VS 2010 复制代码到word出现乱码解决办法
- VC2005:无法执行添加/移除操作,因为代码元素是只读的....多个解决办法
- hadoop集群运行jps命令以后Datanode节点未启动的解决办法
- vc 出现“fatal error C1085: Cannot write precompiled header file: 'Debug/xxx.pch': The parameter is incorrect“的错误的解决办法
- VS2015 安装mvc4安装包以及vs2010 sp1后导致Razor语法失效代码不高亮(能正常运行)/视图页面无法智能提示(.cshtml)解决办法
- C++代码调用C库中的 undefined reference解决办法
- 20160305 VS2013遇到代码字体颜色异常,打字反应变慢,鼠标不断转圈的解决办法
- 微信小程序 setData accepts an Object rather than some undefined 解决办法
- vs2013没有代码提法的一种解决办法
- 上传文件form表单enctype="multipart/form-data"传值解决办法(代原代码)
- VS中使用VC资源编辑器添加变量或事件处理程序出现脚本错误的解决办法
- VS编译时源代码与原始版本不同的解决办法
- 使用CString的方法(以及用VC写DLL中"error LNK2005: _DllMain@12 already defined"的解决办法)
- hadoop集群运行jps命令以后Datanode节点未启动的解决办法
- vs的vc++项目中出现各种类型错误LPCSTR等的解决办法
- MAC 系统升级10.10以后PHP验证码错误的解决办法。[ 一行代码轻松解决! ]
- VS 代码提示默认不选中 解决办法