VC++6.0版本号程序转成VS2010版「建议收藏」

VC++6.0版本号程序转成VS2010版

大家好,又见面了,我是全栈君。

直接转换的时候遇到两个问题:

1、预编译头文件*.PCH找不到

2、static_cast”: 无法从“void (__thiscall CView2::* )(void)”转换为“LRESULT (__thiscall CWnd::*

1、来源:http://www.zhuyanfeng.com/archives/2231

错误:

fatal error C1083: 无法打开预编译头文件:“Debug\xxx.pch”: No such file or directory

“Rebuild All”没有解决,然后把“C/C++”属性中的“预编译头”由“使用(/Yu)”改为“创建(/Yc)”,问题攻克了。看来还是预编译头文件xxx.pch创建的有问题。细致想一下,vcproject的预编译头是由stdafx.cpp编译生成的。(事实上起作用的是stdafx.h,但头文件不參加编译,所以须要stdafx.cpp文件,这个文件中仅仅有一句代码:#include “Stdafx.h”。)

VC++6.0版本号程序转成VS2010版「建议收藏」

综上:最妥善的解决方法就是,在project属性中。选择“使用(/Yu)”预编译头,而单独将stdafx.cpp设置为“创建(/Yc)”预编译头。

关于“预编译头”的作用,參考例如以下:

在非常多程序中。每一个源文件都存在一些同样的部分。比方要包括同样的一些头文件,并且这些头文件可能非常长,比如window.h。假设用普通的方法编译这些源文件,对这些头文件在每一个源文件里的出现都要又一次编译,作了非常多反复工作。

假设能将这些头文件专门进行编译。并且把结果存储起来。然后在编译包括这些头文件的源文件时,使用上述结果替代头文件在源文件里的出现。就能够大大降低工作量。Microsoft Visual C++提供的“预编译头文件”机制就支持这一功能。

所谓的预编译头就是把一个project中的那一部分代码,预先编译好放在一个文件中(通常以.pch为扩展名)。这个文件就称为预编译头文件。这些预先编译好的代码能够是不论什么的C/C++代码——–甚至是inline的函数,但必须是稳定的。在project开发的过程中不会被常常改变。

假设这些代码被改动。则须要又一次编译生成预编译头文件。注意生成预编译头文件是非常耗时间的。同一时候得注意预编译头文件通常非常大,通常有6-7M大。

注意及时清理那些没实用的预编译头文件。

或许你会问:如今的编译器都有Time stamp的功能。编译器在编译整个project的时候,它仅仅会编译那些经过改动的文件。而不会去编译那些从上次编译过。到如今没有被改动过的文件。那么为什么还要预编译头文件呢?答案在这里,我们知道编译器是以文件为单位编译的,一个文件经过改动后,会又一次编译整个文件。当然在这个文件中包括的全部头文件中的东西(.eg Macro, Preprocesser )都要又一次处理一遍。VC的预编译头文件保存的正是这部分信息。

以避免每次都要又一次处理这些头文件。

2、来源http://blog.csdn.net/chenyujing1234/article/details/7387712

不能转换void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)2010-05-13 11:35开发平台由VC6.0升级至VS2005。须要将原有的项目迁移,可能碰到类似错误:
error C2440: ‘static_cast’ : cannot convert from ‘void (__thiscall CMainFrame::* )(void)’ to ‘LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)’  

VS2005对消息的检查更为严格,曾经在VC6下全然正常执行的消息映射在VS2005下编译不通过

ON_MESSAGE(WM_message,OnMyMessage);
   OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);假设不符合,则有错误提示:
     error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
        在匹配目标类型的范围内没有具有该名称的函数
     error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
        在匹配目标类型的范围内没有具有该名称的函数

解决方法例如以下:

首先,把原来的消息函数返回值类型改为LRESULT,函数内能够随便写个return TRUE; 然后消息函数的參数必须改写成(WPARAM wParam,LPARAM lParam)而不论这两个參数是否用得到;最后,消息映射如ON_MESSAGE(WM_message,& OnMyMessage)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116521.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • apache2虚拟主机实现一个服务器绑定多个域名[通俗易懂]

    apache2虚拟主机实现一个服务器绑定多个域名[通俗易懂]1.apache2的配置首先要配置好apache2,如果未配置,请参考我之前的博文:lamp的配置2.域名的解析将全部域名的www和@的A记录解析到云服务器的IP3.虚拟主机的配置1.配置httpd.conf如果etc/httpd/conf/httpd.conf存在,则配置此httpd.conf如果etc/httpd/conf/httpd.conf不存在,此时需要我们在/etc/apache2下

    2022年9月18日
    0
  • 404页面的制作教程「建议收藏」

    404页面的制作教程「建议收藏」近期发现很多让做SEO诊断的网站一些最基础的操作都没有做,比如首选域确定及301设置、robots.txt文件没有写、404页面没有制作及设置等。前面两项在网上信息最多,这次主要说下404页面的问题。404页面的作用是什么?404页面是为了在用户属于错误URL或网页文件被删除时提醒用户的页面,页面中可以设置网站导航、背景颜色或图片的普通网页。为的是用户没有访问到正常页面时可以…

    2022年7月27日
    16
  • [转载]【电子书下载神器】太给力了!你还找不到想要的电子书吗?

    [转载]【电子书下载神器】太给力了!你还找不到想要的电子书吗?1.电子书下载网(推荐)读远:发掘优质电子书资源Kindle精读书库Hi!PDAHi!PDAreadfree.me子乌书简 苦瓜书盘mLook看书掌上书苑-主页新浪微盘 | 免费网盘    2.电子书网站  E书吧-免

    2022年7月15日
    17
  • 硬核!高频Linux命令大总结,建议收藏~

    硬核!高频Linux命令大总结,建议收藏~前言记得不久前跟大家大分享了一波个人在平时日常工作、学习、开发、写文字、做视频等过程中,一些好用高效的在线工具和网站,并且把自己的浏览器收藏夹书签离线文件都导出给大家了。很多小伙伴后台反馈还不错,说书签一导入后,很多工具确实挺好用,主要省了很多找资源和整理的时间。今天继续分享,最近花了不少时间把平时开发过程中常用的一些Linux系统命令给做了一个大整理,形成一个常用高频Linux速查备忘录。有了它,还怕Linux操作系统常用操作和命令记不住么?接下来直接上菜吧。注:本文GitHubhtt

    2022年5月8日
    34
  • Python中获取当前日期的格式

    Python中获取当前日期的格式

    2021年11月26日
    53
  • glassfish安装教程_Glass Shatters

    glassfish安装教程_Glass Shatters一、下载页面:https://glassfish.java.net/downloads/3.1.2.2-final.html二、下载地址:http://download.java.net/glassfish/3.1.2.2/release/glassfish-3.1.2.2-ml.zip三、下载后解压到/srv/目录下.四、修改启动脚本:/srv/glassfi…

    2022年8月20日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号