WinCE 编程技巧集合

1. CString 到 Char* 的方法:

    包含头文件 #include<atlconv.h>

    USES_CONVERSION;                                 // 定义转换宏

    int   nNum = fprintf(fp,"%s",T2A(strOld));   // 转换

    
    原理:T2A宏把TCHAR* (CString) 转化为   char* ,vc中这一转换可以自动完成。   

 

2. 把窗口放到最前

 

   HWND hwnd;
   if(hwnd = FindWindow( LPCTSTR lpClassName,LPCTSTR lpWindowName ))
  {
        SetForegroundWindow(hwnd);       
   }

3.写注册表,关键点在于值的类型不同,转换的也不同


 HKEY hOpenKey;
 DWORD dwOpenStyle;
 long lResult=0;
 LPCTSTR keyName;
 DWORD dwKeyValue;
 LPCTSTR strKeyValue;
 LPCTSTR dwKeyName;
 
 keyName=L"ControlPanel//Volume";


 lResult=RegCreateKeyEx(HKEY_CURRENT_USER,keyName,0,L"Volume",0,0,NULL,&hOpenKey,&dwOpenStyle); 
 dwKeyName=L"Volume";
 strKeyValue=L"wowo";
 dwKeyValue=789;


 lResult=RegSetValueEx(hOpenKey,dwKeyName,0,REG_SZ,(BYTE*)strKeyValue,wcslen(dwKeyValue)*2); //写字符串
 lResult=RegSetValueEx(hOpenKey,dwKeyName,0,REG_DWORD,(LPBYTE)&dwKeyValue,sizeof(DWORD));  //写DWORD类型


 if(lResult!=ERROR_SUCCESS)
 {
  AfxMessageBox(L"B");
 }


 RegCloseKey(hOpenKey);

 

 4. 任务栏托盘显示图标

 

m_tnid.cbSize=sizeof(NOTIFYICONDATA);
m_tnid.hWnd=m_hWnd;
m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
m_tnid.uCallbackMessage=WM_TRAY_NOTIFY;

//用户定义的回调消息  
CString szToolTip=L"托盘图标实例";
_tcscpy(m_tnid.szTip, szToolTip);
m_tnid.uID=IDI_ICON2;

HICON hIcon=NULL;
hIcon=AfxGetApp()->LoadIcon(IDI_ICON2);
m_tnid.hIcon=hIcon;

::Shell_NotifyIcon(NIM_ADD,&m_tnid);

必须使用16*16的ico图标

 

2.  warning C4819

     这个警告的意思是:在该文件中有一个或多个字符不是Unicode字符!要求把这个字符变成Unicode字符。

     解决方法 1:

           哪个文件出现这个警告错误,打开它, 用VS2005的查找替换功能,打开允许正则表达式选项,选择当前窗口,查找替换 /n 为 /n ,  然后,这个世界就清净了。

           原因: 查找的 /n 是跨平台的回车,替换的 /n 却是当前代码页的回车了。

     解决方法 2:

           打开出现warning的文件,Ctrl+A全选,然后在文件菜单:file->advanced save options ,在弹出的选项中选择新的编码方式为:UNICODE codepage 1200 ,点击确定,问题就解决了。

 

3. fatal error LNK1276

      未以“/”开头, 由 #pragma comment(lib,"..//..//for Windows//bin//Release//cximage.lib") 引起

      解决方法:

      由于VC 2005 不支持空格而导致的编译错误,将目录名中的空格去除即可。如:#pragma comment(lib,"..//..//Windows//bin//Release//cximage.lib")

4. error LNK1169

      找到一个或多个多重定义的符号, 当.h文件里有函数实现时,VS2005编译器报此错误。

      解决方法:
           1.在.h里的函数声明前加 inline
           2.在项目->属性->链接器->命令行->附加选项中加   /force

5. fatal error LNK1112: 模块计算机类型”THUMB”与目标计算机类型”ARM”冲突

解决办法:


1.新建项目时,在”平台”->”选择要添加到当前项目中的 Platform SDK。”中,把”已安装的 SDK”全部添加到”选定的 SDK”


2.在”属性页”->”配置属性”->”链接器”->”命令行”中的”附加选项”里,有如下命令:”/subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE”,在其后加入命令:” /MACHINE:THUMB”,即附加选项现在内容为:” /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE /MACHINE:THUMB”,确定即可.


6. fatal error LNK1104: 无法打开文件“secchk.lib” and fatal error LNK1104: 无法打开文件“ccrtrtti.lib”

解决办法:
  没有添加lib所造成,在原来ppc 2003有的lib,转换成mobile 5.0后就没有了,又重新添加了lib 路径即可。

  属性-〉c/c++ -〉常规->附加文件目录  和  链接器-〉常规-〉 附加库目录 -> 添加相应的lib路径

 

7. warning C4273 …… inconsistent dll linkage

     在生成动态连接库时会用dllexport或dllimport, 这个就需要注意了。还有,当你是生成静态lib的时候,可不要加上这两个东东,否则生成lib后,以后的链接就一直链接不上了:说那些函数没有实现(unsolved),还以为是C编译和C++编译的问题,真是扯啊扯的。本来是很简单的问题,由于一个别人的工程是生成dll的,他在一个文件中就写死了,而没有考虑到生成静态lib,导致我直接生成静态lib后,至少使用了其中一个标志(dllexport或dllimport,),然后就55了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值