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