从VC6.0到VC8.0

在我的文件EmpEditDlg.cpp中有三地地方需要修改
第一个是 ReadHuge,错误提示ReadHuge不是CFile的函数。
第二个是关于一些CRT函数也就是像strcpy这类的函数。
后来查阅http://www.dotnetsky.net/netsave/ShowTopic-75221.html“VC++6.0 跟VC++.NET有什么区别?”此贴时候回复中找到了答案。原文如下(对这次有益的信息加了下划线):

1.   vc2005中CFile没有ReadHuge成员函数,把vc6中的ReadHuge函数合并到Read了Write类似
2.  for循环内变量只在循环内有效: 
    例如: 
     int j;
     for(int i=0;i<10;i++)
     {

     }
     i=i+j;此处的i将未定义.
3.vc2005不支持默认类型.  const a;此a为未定义.
4.sqrt 不接受 int 型参数,但接受double 或者float型的参数。   
  你给的是个int值,它可以转换成 float 的也可以转换成 double 的,编译器不知道应该转换成哪个,要你帮忙决定。   
  改成 sqrt((double)checker) 或 sqrt((float)checker) 就可以了。   
  也可以直接修改参数类型为double 或者float

5.strcpy和strcat的一些说明:

  在Visual C++ 2005中,CRT中的一组函数已不再建议使用,而应使用新提供的安全版本。
大多数这些不建议使用的函数如果使用不当,将会导致缓冲区溢出或其他安全问题,
这些函数如:strcpy、strcat等等。这些函数新的安全版本都在函数名后加了一个_s后缀,
以方便识别,如strcpy_s、 wcscpy_s、mbscpy_s、calloc_s和strcat_s这些函数。

  如果想继续使用老版本、非安全的函数,可在源代码开始处加上
#define value of _CRT_SECURE_NO_DEPRECATE(此处value代表某一数值);
然而,升级代码时就使用新的安全函数

对于strncpy_s的解决办法正好有人跟我的代码一样“图片读取的”http://pischp.blog.163.com/blog/static/118466020069210021457/#comment=fks!084066080083083067080087084095085087089071082080086图像数据存入数据库的方法
 //strncpy_s((LPSTR)&bmfHeader,,(LPSTR)m_pBuffer,bmfHeaderLen);  
 //VC2005 对strcpy、strcat类似的函数换成版本安全的函数特点是添加了'_s'后缀,所以将strncpy改为strncpy_s
 strncpy_s((LPSTR)&bmfHeader, bmfHeaderLen, (LPSTR)m_pBuffer, bmfHeaderLen);

第三呢是关于app的初始化函数不同,是Enable3dControls的警告。有一个帖子网上很多“CWinApp::Enable3dControls 在VS2005中也不支持了 ”不知道原来的帖子是谁写的

CWinApp::Enable3dControls 在VS2005中也不支持了
在VS2005中,CWinApp::InitInstance里变化还是挺大的
从VC6升级上的程序,要改一下,才能运行
基本上把
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
//  of your final executable, you should remove from the following
//  the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls();  // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
改为
// InitCommonControlsEx() is required on Windows XP if an application
// manifest specifies use of ComCtl32.dll version 6 or later to enable
// visual styles.  Otherwise, any window creation will fail.
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// Set this to include all the common control classes you want to use
// in your application.
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
// Initialize OLE libraries
if (!AfxOleInit())
{
  AfxMessageBox(IDP_OLE_INIT_FAILED);
  return FALSE;
}
AfxEnableControlContainer();

但是这么做呢会优错误,IDP_OLE_INIT_FAILED,没有再Resource.h定义,我查到的定义的代码是#define IDP_OLE_INIT_FAILED             100,但是#define IDD_ABOUTBOX                    100另个都一样怎么办呢?我在资源视图的字符串表里添加了IDP_OLE_INIT_FAILED   ID为103(不冲突),值为“OLE初始化失败”
到此位置这个Enable3dControls才算解决了。

另外看到一片帖子不错。
VC 6.0 升级到 VC.Net的一些问题
http://www.cnblogs.com/klein/articles/447463.html值得一看

这些是2005升级的东西

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值