1.在使用全局函数GetFileVersionInfoSize,GetFileVersionInfo,VerQueryValue的时候出现以下错误:
My BrowerDlg.obj : error LNK2019: 无法解析的外部符号 _VerQueryValueA@16 ,该符号在函数 "public: __thiscall CAboutDlg::CAboutDlg(void) "
(??0CAboutDlg@@QAE@XZ) 中被引用
My BrowerDlg.obj : error LNK2019: 无法解析的外部符号 _GetFileVersionInfoA@16 ,该符号在函数 "public: __thiscall CAboutDlg::CAboutDlg
(void) " (??0CAboutDlg@@QAE@XZ) 中被引用
My BrowerDlg.obj : error LNK2019: 无法解析的外部符号 _GetFileVersionInfoSizeA@8 ,该符号在函数 "public: __thiscall CAboutDlg::CAboutDlg
(void) " (??0CAboutDlg@@QAE@XZ) 中被引用
Debug/My Brower.exe : fatal error LNK1120: 3 个无法解析的外部命令
解决:在项目>>链接器>>输入,附加依赖项加入Version.lib库
2.fatal error C1083: 无法打开包含文件:“fstream.h”: No such file or directory
解决:改成#include <fstream>
using namespace std;
3.IImagingFactory
imaging.lib
错误:
IImageDlg.obj : error LNK2001: 无法解析的外部符号 CLSID_ImagingFactory
1>IImageDlg.obj : error LNK2001: 无法解析的外部符号 IID_IImagingFactory
解决:添加头文件:
#include <imaging.h>
#include <initguid.h>
#include <imgguids.h>
Storage Card
4.添加位图
右击资源文件添加》选择位图》导入》任意.bmp格式的位图,即窗体背景图
5.错误:error C2352: 'CDialog::OnInitDialog' : illegal call of non-static member
解决:将OnInitDialog定义的函数中的static BOOL OnInitDialog()改为virtual BOOL OnInitDialog()
6.编译成release版本与debug版本的程序有何执行上的区别?
VC/MFC / 基础类...编译成release版本与debug版本的程序有何执行上的区别?这也存在debug跟release的问题吗?这种情况下大多也是因为代码书写不正确引起的,查看MFC的源码,可以发现好多ASSERT的语句(断言),这个宏只是在debug模式下才有效,那么就清楚了,release版不报错是忽略了错误而不是没有错误,这可能存在很大的隐患,因为是Debug模式下,比较方便调试,好好的检查自己的代码。
7.uses undefined class 'CToolTipCtrl'
解决:缺少头文件#include <stdafx.h>
8.
程序:m_sTime.Format ("%d,%d,%d", CurTime.GetHour(), CurTime.GetMinute(),CurTime.GetSecond());
错误:CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [9]' to 'const wchar_t *
解决:加上头文件#include <tchar.h> 和改成 m_sTime.Format (TEXT("%d,%d,%d"), CurTime.GetHour(), CurTime.GetMinute(),CurTime.GetSecond());
9.
错误: 'CArray<TYPE,ARG_TYPE>::Add' : cannot convert parameter 1 from 'const char [1]' to 'CString' 加上_T("")
_T("我是谁?");
将const char* 转换成CString用_T("")
将const char*转换成const wchar_t*用 TEXT("")加头文件#include <tchar.h>
将const char*转换成'const VARIANT &'用 _T("")加头文件#include <afxdb.h>
10.
错误:cannot convert parameter 1 from 'TCHAR [10]' to 'const char *',
解决:
LPSTR = char*
LPCSTR = const char*
LPWSTR = wchar_t*
LPCWSTR = const wchar_t*
LPTSTR = char* or wchar_t* depending on _UNICODE
LPCTSTR = const char* or const wchar_t* depending on _UNICODE
11.
错误:cannot convert parameter 1 from 'const char [14]' to 'LPCTSTR'
m_stcPlay.SetWindowText("播放");
解决:m_stcPlay.SetWindowText(_T("播放"));
12.
在VS2010开发环境中CString 和char转换
热度 1已有 186 次阅读 2011-2-11 23:08 |个人分类:开发日志|系统分类:研发心静|关键词:VS2010;CString;char;TCHAR
VS2010编程,与以前的版本差别不大,开发效率有所提高,但以前没注意的CString字符串的操作,让人头痛起来。因为程序要用到char操作,就需要CString的转换,这个以
前不是问题的问题让人烦。虽然网上有不少这方面的介绍,但好多在VS2010下不能用,这次简要的整理一下,不贪求MSDN的转换原理,直接能用就行。
在Visual C++.NET中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set),这样导致在VC6.0中非
常简单实用的各类字符操作和函数在VS2003以后版本的环境下运行时会报各种各样的错误。
1、char向CString转换
这个比较简单,直接赋值即可,却还得我自己写一个转换函数,一个一个字符填充搞定。
CString str;
char buf[128];
......
str=buf; //就可以了
2、CString向char转换
这个比较烦,好多网上的介绍不能用,自己写一个转换函数,也一个一个字符填充搞定,以前用一直没有问题,这次测试有出现乱码,后来在网上找到用CStringA来解决。
CStringA str,strTmp;
strTmp=m_strInfo;//strInfo是CString类型
strServeIPPort.Format("第一次,%s,%d",strTmp,id);//strTmp要用CStringA类型
char smsg[256];
// Convert to a char*
strcpy_s(smsg, strServeIPPort);
这样就搞定了,不过CStringA类不能像CString那样强大,CString对象可以多个相加连接,而CStringA只能两个连接。如果用CString对象转换为CStringA的格式,对于字符串
中的“.”字符要丢失,只好用CStringA的临时对象strTmp来替换,就解决了。
-------------------------------2.14补充----------------------
3、char向LPWSTR转换
在VC6.0中,下面没有问题:
char path[128];
::GetCurrentDirectory(128,path);
但在VS2010中,提示cannot convert parameter 2 from 'char [512]' to 'LPWSTR'。说明转换有问题,还是UNICODE问题。把char类型改为TCHAR
TCHAR path[128];
就可以了。
4、_TCHAR *向const char *转换
在VC6.0中,下面没有问题:
_TCHAR *pbuf=buf;
size_t size=strlen(pbuf);
但在VS2010中,提示 cannot convert parameter 1 from '_TCHAR *' to 'const char *'。说明转换有问题,还是UNICODE问题。把strlen函数改为wcslen
size_t size=wcslen(pbuf);
就可以了
13.
error C2440: 'static_cast' : cannot convert from 'void (__cdecl CMyAppView::* )(void)' to 'LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)'None of the functions
with this name in scope match the target type
解决方法:
afx_msg void OnHotLinkExplain(); --- 〉
afx_msg LRESULT OnHotLinkExplain(WPARAM wParam,LPARAM lParam);
14.错误error C3861: 'WCE_FCTN': identifier not found
srand( WCE_FCTN(time) (NULL) );
解决:srand( (time) (NULL) );是由于版本不兼容导致的。In older SDKs where MFC was a part of the SDK, they used function wrappers for many of the OS APIs (most
are defined in wcealt.h). This is gone now. In fact I don't think you are supposed to use WCE_FCTN directly - it was an internal macro.
15.错误:fatal error RC1015: cannot open include file 'wceres.rc'.
解决:直接注释掉:#include "wceres.rc" // WCE-specific components
16.错误:error LNK2019: 无法解析的外部符号 __imp_time,该符号在函数 __unwind$82008 中被引用
原因:居然wince下不支持time()的调用了,没有实现lib,
解决:现在的办法是调用CTime::GetCurrentTime()或windows API GetSystemTime()
17.错误:VC2005:无法执行添加/移除操作,因为代码元素是只读的....多个解决办法。
最近在编程过程中偶尔会遇到这个错误, 非常烦人, 因为一旦添加事件处理函数就会弹出这个窗口
解决方案:
1、重启VC
2、打开Resource.h文件看看 一看就知道了 有些定义重复了 可以手动改掉 保存 编辑器重新加载 。。。。。。。。
3、关闭解决方案,删除ncb文件重新添加即可
4、实在不行就手动添加消息处理
5、查看.h和.cpp文件的属性,有可能是只读的,修改属性后就可以了
6、把你要添加事件的对话框相应的类文件(*.h和*.cpp)给关了就可以了
上面几种方法网上搜罗的。推荐第3种。