VS2005 C++ 手机开发杂记(上)

来源:互联网 发布:各国制造业gdp数据 编辑:程序博客网 时间:2024/05/16 16:21

偶然发现此文,作为纪念!

转自:http://blog.tanggaowei.com/2008/05/vs2005-c.html

作者 传说一梦 写于 2008-05-08

 

———————————————————————————- 
添加 nmake -> link 的 lib 路径 
———————————————————————————- 
EX_LIBS="D:/Program Files/Windows CE Tools/wce400/STANDARDSDK/Lib/Armv4i/*.lib"

———————————————————————————- 
fopen 在 coredll.dll 中已经定义 
———————————————————————————- 
调换 dll 的加载顺序:

EX_LIBS="D:/Program Files/Windows CE Tools/wce400/STANDARDSDK/Lib/Armv4i/*.lib" $(WCECOMPAT)/lib/wcecompatex.lib

改为:

EX_LIBS=$(WCECOMPAT)/lib/wcecompatex.lib "D:/Program Files/Windows CE Tools/wce400/STANDARDSDK/Lib/Armv4i/*.lib"

———————————————————————————- 
编译 openssl 时找不到 windows.h 文件 
———————————————————————————- 
在ce.mak文件的CFLAG项添加:-I"D:/Program Files/Windows CE Tools/wce400/STANDARDSDK/Include/Armv4i

———————————————————————————- 
造成最简单的 curl 
———————————————————————————- 
set CFG=release-dll 
nmake -f Makefile.vc8

———————————————————————————- 
在WINCE下编译openssl 
———————————————————————————- 
INSTALL.WCE 里写最后用 vc++ 环境编译,我用 eVC 才编译通过

———————————————————————————- 
在 vs2005 下编译 cURL 
———————————————————————————- 
编译Release版本。 
set CFG=release-dll-ssl-dll-zlib-dll 
set OPENSSL_PATH=C:/openssl 
set ZLIB_PATH=C:/zlib/include 
nmake -f Makefile.vc8 
其输出:libcurl_imp.lib, libcurl.dll 
无法打开输入文件“zdll.lib”,可将“zdll.lib”复制到可以找到的地方 
如果需要编译其他版本,可查看设定相应的CFG 参数即可。 
(用 set CFG=release-dll 找不到结果文件,但编译还是成功的)

———————————————————————————- 
error LNK2019: 无法解析的外部符号 socket 
———————————————————————————- 
在头文件里载人lib: 
#include <winsock.h> 
#pragma comment(lib, "winsock.lib")

———————————————————————————- 
socket 开发的include 和 lib 环境 
———————————————————————————- 
#include <string> 
#include <iostream> 
#include <winsock.h>

#pragma comment(lib, "winsock.lib")

using namespace std;    // 使用 std 命名空间,可使用 string 类型

———————————————————————————- 
添加编译所需要(依赖)的 lib 文件 
———————————————————————————- 
[菜单]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。

(等同于“#pragma comment(lib, "winsock.lib") ”语句)

———————————————————————————- 
添加库(Libs)文件目录 
———————————————————————————- 
1.“项目->属性->配置属性->连接器->常规->附加库目录” 
2.“工具->选项->项目和解决方案->C++ 目录”,选择对应平台,然后添加所需“库文件”目录

———————————————————————————- 
添加包含(include)文件目录

———————————————————————————- 
1.“项目->属性->配置属性->C/C++->常规->附加包含目录” 
2.“工具->选项->项目和解决方案->C++ 目录”,选择对应平台,然后添加所需“包括文件”目录

———————————————————————————- 
LPCSTR 与 LPCWSTR 之间的转换 
———————————————————————————- 
#include <atlbase.h>

CA2W ();  // LPCSTR to LPCWSTR 
CW2A ();  // LPCWSTR to LPCSTR

———————————————————————————- 
C++ 应用程序项目添加 CString、 CStringArray 类的支持和使用 AfxMessageBox 函数 
———————————————————————————- 
#include <afxwin.h>         // MFC 核心组件和标准组件

———————————————————————————- 
VS2005 C++ Win32 智能项目,添加资源菜单时要设置的属性 
———————————————————————————- 
SHMENUBARINFO mbi;

memset(&mbi, 0, sizeof(SHMENUBARINFO)); 
mbi.cbSize     = sizeof(SHMENUBARINFO); 
mbi.hwndParent = hWnd; 
mbi.nToolBarId = IDR_MENU; 
mbi.hInstRes   = g_hInst; 
mbi.dwFlags |= SHCMBF_HMENU;    // 重点要添加的代码

注:给Menu 的ID为IDM_QUIT的子菜单添加执行代码:

    case IDM_QUIT: 
        AfxMessageBox ( _T("Quit" ), MB_ICONINFORMATION ); 
        break;

———————————————————————————- 
error LNK2019: 无法解析的外部符号 __imp_curl_easy_init 
———————————————————————————- 
由于缺少obj文件,在项目里添加包含路径:C:/curl/lib/release-dll/*.obj

———————————————————————————- 
fatal error LNK1112: 模块计算机类型“ARM”与目标计算机类型“X86”冲突 
———————————————————————————- 
所使用的外部*.obj是X86机型的,而正在编译的目标是ARM机型。应该从新将外部*.obj编译成ARM机型的。

———————————————————————————- 
C++ 手机 MFC 项目的菜单经常不正确 
———————————————————————————- 
删除 res/MyProjectsp.rc2 中以下内容:

/* 
IDR_MAINFRAME SHMENUBAR DISCARDABLE 
BEGIN 
    IDR_MAINFRAME, 
    1, 
    I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 
    IDS_OK, 0, NOMENU, 
END 
*/

———————————————————————————- 
VS2005 C++ MFC 智能设备应用程序中,映射 WM_HOTKEY 消息 
———————————————————————————- 
1.  申明:在 MyProject.h 中写到“DECLARE_MESSAGE_MAP()”语句之前

afx_msg LRESULT OnHotKey ( WPARAM wParam, LPARAM lParam );  // 一定要在 DECLARE_MESSAGE_MAP() 之前

DECLARE_MESSAGE_MAP()

2. 映射:在 MyProject.cpp 的 BEGIN_MESSAGE_MAP() 段添加代码

BEGIN_MESSAGE_MAP(….) 
… 
ON_MESSAGE( WM_HOTKEY, OnHotKey ) 
… 
END_MESSAGE_MAP()

 

3. 定义:在 MyProject.cpp 中实现代码

LRESULT CMiniBlogClientDlg::OnHotKey ( WPARAM wParam, LPARAM lParam ) 

    if(VK_TBACK == HIWORD(lParam)) 
    {         
          SHSendBackToFocusWindow( WM_HOTKEY , wParam, lParam);

          return 1; 
    }

    return 0; 
}

———————————————————————————- 
MFC 截获和处理消息 
———————————————————————————- 
重写 PreTranslateMessage(MSG* pMsg)  函数

———————————————————————————- 
分割字符串 
———————————————————————————- 
#include <string.h> 
#include <stdio.h>

char data[] = "A string/tof ,,tokens/nand some  more tokens"; 
char seps[]   = " ,/t/n";   // 分隔符字符集 
char *token;

void main( void ) 

   printf( "%s/n/nTokens:/n", data ); 
   /* Establish string and get the first token: */ 
   token = strtok( data, seps ); 
   while( token != NULL ) 
   { 
      /* While there are tokens in "string" */ 
      printf( " %s/n", token ); 
      /* Get next token: */ 
      token = strtok( NULL, seps ); 
   } 
}

———————————————————————————- 
字符中转换成数字 
———————————————————————————- 
strtol(); 
strtod(); 
atoi();

———————————————————————————- 
数字到字符串 
———————————————————————————- 
_itoa( nHour,buf, 10);  // 10 代表十进制

char* token = "20";    
char* buf; 
int r; 
int nHour; 
string sHour; 
nHour = atoi( token); 
nHour += 8; 
_itoa( nHour,buf, 10); 
sHour = buf;

原创粉丝点击