当前位置:数据分析 > vs2010串口通信与VC6.0区别_VC++6.0与VS2010的区别

vs2010串口通信与VC6.0区别_VC++6.0与VS2010的区别

  • 发布:2023-09-24 21:52

VC6.0和VS2010最大的区别在于默认的字符集,VC6.0默认的字符集为ANSI,而VS2010默认的字符集为UNICODE. 这就造成了,VC6和VS2010在处理字符问题上的不同。 ? ? 首先要说明的是,这种不同主要是编译器层面上的不同,为什么要把VC6使用的ANSI字符集。到了VS2010时就改为UINICODE呢。这主要是为了处理字符的方便性来做出更改的。而本身C++语言上的字符类型并没有改变的,比如char类型仍然为1个字节,字符常量默认的也是一个字符占用一个字节的。 ? ?其实为了兼容VC6和VS2010,微软在操作系统的层面,加入了自己的一套规范,比如说用了一些自己定义的数据类型。如TCHAR 如果说在ANSI字符集下,就相当于char, 而如果是再UNICODE字符集下,就相当于wchar_t. ? 而因为在VS2010中处理字符的函数,几乎都变成了UNICODE的形式,而本身字符串常量为char类型。微软的解决方案是。用_T(),TEXT(),_TEXT()宏,或者L##来将字符串常量改为UNICODE形式的。比如,在VC6中,CString 的Format函数接受ANSI字符,而在VS2010中,必须改为Format(_T("abc"))或者Format(TEXT("abc"));或者Format(L"abc") ;的形式将单个char字符,即用一个字节代表一个字符的形式。改为UNICODE字符,即两个字节代表一个字符。 ? ?另外,VC的main函数可以为void main()形式,而VS2010中最好用int main()的形式。 ?

VC6.0采用消息机制处理当对话框及其上的子控件创建完成的状态,即发送WM_INITDIALOG, 然后可对此消息做处理;

而VS2010则直接采用虚函数机制, 我们可重写OnInitDialog()方法。

区别1:字符串的表达

void CMy123Dlg::OnBnClickedButton1() { // MessageBox("你好");//以前VC6.0写法,现在用不了.老版本用的多字节字符集

// MessageBox(L"你好");//L 是 unicode字符集,可移植性不好

// MessageBox(_T("你好"));//这3种方法一样 // MessageBox(TEXT("你好")); // MessageBox(_TEXT("你好"));

} 在VS2010中用哪个比较好?_T(),至于说明介绍之类的资料,在网上有很多,所以没有复制过来

?

区别2:网络编程的移植性:

区别还是有一丁点.就是字符上面.只要用_T(x)即可

首先不得不说明:现在相当大的程序,都是使用多字节,并不是一步就能改成兼容的Unicode库.在代码中是要花费大量精力去修改,本来一个小小的程序, 说不定修改就占了一半的时间与精力.(会修改还好,不会修改,那真的是...)举一个函数strcpy_s,在2者版本中兼容性就有问题.具体在MSDN 中查询strcpy_s

所以,以后的程序中以大众为版本,使用多字节版--------->以后不做提示.默认为多字节版,另外写的程序默认为静态链接库(考虑到程序移植问题)

?

区别3:在类视图中,VS2010删除一个函数不是右键-->删除就能删除的,而是在类向导中--->删除

?

区别4:自定义函数格式发生了变化,如Vc6.0自定义的PostMessage就与VS2010格式不一样,VS2010采用的指针格式

?

区别5:VS2010自带了winsock2库(第2版的库),每次都不用加Ws2_32.lib这个了(推荐加上)

举例:创建win32控制台应用程序(带MFC头文件),每次就不用加

?

区别6:同一条语句.在VS2010编译器中,C++不允许默认int类型存在.而在VC++6.0就可以存在.语句如下:

ShutDownProc(BYTE* DATE);//函数声明

CMyDlg::PutFileProc(BYTE *DATE)//函数使用 { SetDlgItemText(IDC_WORK_START,(char*)DATE); }

相关文章