wince6.0,vc++调试中遇到的错误与解决

时间:2022-05-25 17:59:29

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种。 

 

相关文章