visual stdio2005 如何像vc++6.0一样编译和调试啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了visual stdio2005 如何像vc++6.0一样编译和调试啊相关的知识,希望对你有一定的参考价值。
换了编程环境,可是不会用,那位能举个从创建cpp文件到编译,调试的例子啊!
参考技术A 启动“工具”->“导入导出设置”向导,选择“重置所有设置”,在“选择一个默认设置集”中选择“Visual C++开发设置”,点击“完成”,这样就将VS2005的开发环境设置成VC6的快捷键等。这样操作就基本和VC6一样了。 参考技术B 选择file->new->project然后选择other languages,选择visual c++语言,再选择win32 console application,然后给你的项目起个名字就ok了 参考技术C 建工程, 选"Win32 项目" 或 "MFC 应用程序".
PS: 如果装的是速成版,可以考虑卸载了吧。本回答被提问者采纳
从 VC6 到 Visual Studio 2010 的 C++ 序列化
【中文标题】从 VC6 到 Visual Studio 2010 的 C++ 序列化【英文标题】:C++ serialization from VC6 to Visual Studio 2010 up 【发布时间】:2014-02-14 11:05:57 【问题描述】:我正在尝试读取/打开已在 Visual Studio 2013 中创建的 C++ 程序中使用 VC++6 构建序列化的文件,某些属性/值未被读取或以某种方式丢失。
请帮助我了解这两个版本有什么不同以及如何解决它。
使用 CArchive 存储如下:
void CCubeShelf::Serialize(CArchive &ar,BOOL bChildren, int iVersion)
if(ar.IsStoring())
m_dwProperties |= CSHELF_MERCH | CSHELF_MERCH_DEPTH;
ar << m_dwProperties;
ar << m_iShelfNum;
ar << m_fDividerWidth;
ar << m_fDividerSpacing;
ar << m_fGrillHeight;
ar << m_crGrillColor;
ar << m_fMercHeight;
ar << m_fMerchDepth;
ar << m_csFrontPath;
ar << m_csLeftPath;
ar << m_csTopPath;
else
ar >> m_dwProperties;
ar >> m_iShelfNum;
ar >> m_fDividerWidth;
ar >> m_fDividerSpacing;
ar >> m_fGrillHeight;
ar >> m_crGrillColor;
if( m_dwProperties & CSHELF_MERCH ) ar >> m_fMercHeight;
if( m_dwProperties & CSHELF_MERCH_DEPTH )
ar >> m_fMerchDepth;
ar >> m_csFrontPath;
ar >> m_csLeftPath;
ar >> m_csTopPath;
CCube::Serialize(ar,bChildren,iVersion);
【问题讨论】:
这完全取决于如何数据被序列化。你必须告诉我们更多关于这方面的信息。 也许你在代码的其他地方序列化了 CTime 对象。在 VS6 中 CTime 只有 4 个字节,但从 VS2003 到 CTime 是 8 个字节长,所以如果你用 VS2013 反序列化一个之前用 VS6 序列化过的 CTime 对象,你会遇到麻烦。 不,很遗憾不是问题所在。我可以检查任何其他课程吗? 事实证明,序列化从来都不是问题,但实际上 = 运算符在升级到 Visual Studio 后不再重载,有什么想法吗? 你是指哪个= operator
?
【参考方案1】:
我现在也遇到了类似的问题。它与 VC6 不支持的 bool
类型有关。
我有这门课:
class CTest
BOOL m_test ;
...
在反序列化过程中,我在某个时候这样做了:
ar >> m_test ;
m_test = !m_test ;
在序列化过程中我这样做了:
ar << !m_test ; // problem was here
提醒:BOOL
实际上在 VC6 和 VC2010 上的 typedefd 为 int
由于 VC6 没有真正的 bool
类型,!m_test
的类型实际上是 int,因此 ar << !m_test
调用 CArchive::operator<<(int)
。
但是在 VC2010 上,!m_test
的类型是bool
,因此CArchive::operator<<(BYTE)
被调用,你在文件中丢失了 3 个字节。然后下次反序列化该类时,m_test
之后的所有内容都会被转移,我们会读取垃圾,程序甚至可能崩溃。
解决方案只是将!m_test
转换为int
。
ar << (DWORD)!m_test ;
【讨论】:
【参考方案2】:需要注意的是:C++ bool 是 '0' 或 '1' 位,归档为 int。
因此,当从存档读取或在 C# 中使用二进制读取器时,您必须读取 int 32 并进行相应操作。
我是这样走的:
var br= new BinaryReader(targetStream);
....
....
,....
var boolValue= br.ReadInt32()==1;
....
....
....
【讨论】:
虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。以上是关于visual stdio2005 如何像vc++6.0一样编译和调试啊的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 中的vc++ 2005创建一个C++的项目,求有多线程的例子!!!
Visual Studio 2005 C++ 编译器比 Visual Studio 6 编译器慢?
为啥我在VC++6.0 或者在vs2008上面安装了Visual Assist X并破解了,运行编程软件后界面显示是红色的GO