一些VS2013下使用QT和MFC的错误解决方案

来源:互联网 发布:调查问卷数据分析软件 编辑:程序博客网 时间:2024/06/01 09:26

本人主要为QT上的途中也有使用VS进行mfc或windows相关的代码编辑 但以下内容对于QT的可参考性会更高一些

若有错误请提醒我更改,或者更好的办法 也请在评论中指出,感激不尽


error C4996: 'fopen': This function or variable may be unsafe. 

做法可参照:http://jingyan.baidu.com/album/49711c616b8a1ffa441b7cdc.html?picindex=1


error C2664: “int GetKeyNameTextW(LONG,LPWSTR,int)”: 无法将参数 2 从“char [80]”转换为“LPWSTR”
做法:设置下工程属性,设为多字节。 工程属性--general--characterset---usemulti-bytecharacterset


error C3861: “ModuleFromAddress”:  找不到标识符
做法:该标识符未声明定义,需声明定义该标识符;


error C2660: 'LoadLibraryA' : function does not take 2 parameters
做法:参数错误,检查参数原型,查看引用是否正确


error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.
做法:缺少一个MFC插件
使用https://download.microsoft.com/download/0/2/3/02389126-40A7-46FD-9D83-802454852703/vc_mbcsmfc.exe链接下载安装,
参照http://jingyan.baidu.com/article/ff42efa916aca5c19e22029a.html


error C2039: “ImageDirectoryEntryToData”: 不是“`global namespace'”的成员
添加:以下两行代码
#include <imagehlp.h>
#pragma  comment (lib, "imagehlp")


IntelliSense:  未定义标识符 "_countof"
添加以下两行代码:
#include <stdlib.h>


error C1189: #error :  Need to include strsafe.h after tchar.h
在stdafx.h文件中添加#include <tchar.h>


error C2733: “SetSysHook”: 不允许重载函数的第二个 C 链接
原因:extern "C" __declspec(dllexport),以C的方式,即不支持重载,所以代码中有导出函数的参数不同,修改即可


error LNK1201: 写入程序数据库“E:\chf_yjy's_work\work5\Procress\HookTerminateProcess\Debug\HookTerminateProcess.pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够
做法:打开项目属性–>链接器–>调试,去掉调试信息,干掉PDB文件,以后不依赖PDB就好了。但是这样你就等于阉割了VS的调试功能,果然是欲练此功必先自宫呀。(需要更好的办法。。。。。。)
修正:将原debug文件夹或release文件夹删除重新生成解决方案即可
error LNK1104: 无法打开文件“debug\\print.ilk”
做法同上。


error C2440: “初始化”: 无法从“const char [20]”转换为“wchar_t”
参照以下代码:
wchar_t user[] = L"administrator"; 


error C1853: “Debug\mymhook.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
做法:可将该项目属性-》C/C++-》预编译头,中的预编译头选项设置为空
可参照:http://www.vcerror.com/?p=2081


warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。
做法可参照:http://blog.csdn.net/enjoy517905407/article/details/37958035
使用VS_QT集成环境时,当出现this application failed to start because it could not find or load the Qt platform plugin "windows"...的弹框,应当在EXE文件夹建立platforms的子文件夹,
从QT的安装目录中的:\Qt\Qt325.5.1\5.5\msvc2013\plugins\platforms目录拷贝出qwindows.dll(Release)[或qwindowsd.dll(debug)],放到exe的platforms目录下


error C2440: '=' : cannot convert from 'const char [xx]' to 'char *'
可以这样做:
feeble = (char*)malloc(sizeof(""));
strcpy(feeble, "");

                                         

error C2375: 'WSAAsyncGetHostByAddr' : redefinition; different linkageC:\Program Files (x86)\Windows Kits\8.1\Include\um\Winsock2.h

重复包含了头文件Winsock2.h,去除这一条include语句即可               


error C1083:Cannot open source file:.......moc_XXX.cpp 

XXX.cpp中可能存在非法字符如下划线等,需将相应文件重命名

                                                                          

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

error C2143: syntax error : missing ',' before '&'

以上两个错误一同出现,原因是我在传参时 一个参数为class aaa,然而 我包含了相应的头文件 却没有在使用之前 进行class aaa;的声明

操作:即使用前声明该类


在VS2008中生成时出错:error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

这是因为在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整型。但是vs2005不支持默认整型。

解决方法如下:
打开:项目----项目属性----配置属性----C/C++----命令行,在附加选项那里添加/wd4430这个选项。(参考自http://www.cnblogs.com/cuteshongshong/archive/2012/10/11/C4430.html)


0 0