在我的文件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升级的东西