VS2005 C++ 手机开发问题集
2008-08-29 11:09
423 查看
VS2005 C++ 手机开发
添加 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;
———————————————————————————-
VS2005 C++ MFC 智能设备应用程序,怎样添加事件
———————————————————————————-
在“类视图”点击右键,打开属性页。属性页的最上一排按钮中有添加“事件”、“消息”等按钮。
———————————————————————————-
只允许一个应用程序实例运行
———————————————————————————-
// 创建一个名为“No Previous Instance”的命名互斥对象
if (!CreateMutex(NULL,TRUE,"No Previous Instance!"))
{
MessageBox(NULL,"创建Mutex失败!","NoPrev",MB_OK|MB_SYSTEMMODAL);
return FALSE;
}
// 是否已有一个实例在运行
if (GetLastError()==ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,"已有NoPrev的一个实例在运行, 当前实例将被终止!",
"NoPrev",MB_OK|MB_SYSTEMMODAL);
return FALSE;
}
———————————————————————————-
捕捉手机 Home 键 (虽然能捕捉到,但是好像最后还是执行了返回桌面操作)
———————————————————————————-
1. 注册热键
BOOL CMiniBlogClientDlg::OnInitDialog()
{
…
// 处理 VK_HOME
BYTE appkey = SHGetAppKeyAssoc(_T("MiniBlogClient.exe"));
::RegisterHotKey ( m_hWnd, appkey, MOD_WIN, VK_THOME);
…
}
2. 重写 PreTranslateMessage 函数
BOOL CMiniBlogClientDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if( pMsg->message == WM_HOTKEY )
{
SetForegroundWindow();
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
———————————————————————————-
为什么按 HOME 键后,MFC 智能设备应用程序的窗口在“任务管理器(CeleTask.exe)”里找不到
———————————————————————————-
在窗口编辑器里,将窗口的 style 属性修改为 Overlapped
———————————————————————————-
屏蔽 KeyDown 事件
———————————————————————————-
BOOL CBlogEdit::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if ( pMsg->message == WM_KEYDOWN )
{
return TRUE;
}
return CEdit::PreTranslateMessage(pMsg);
}
———————————————————————————-
关闭输入法
———————————————————————————-
HIMC hIMC = ImmGetContext( this->GetSafeHwnd() );
ImmSetOpenStatus ( hIMC, FALSE );
———————————————————————————-
在 CEdit 的扩展类中添加翻页功能
———————————————————————————-
1. 控件获得焦点时,屏蔽输入法
void CBlogEdit::OnSetFocus(CWnd* pOldWnd)
{
CEdit::OnSetFocus(pOldWnd);
// 关闭输入法
HIMC hIMC = ImmGetContext( this->GetSafeHwnd() );
ImmSetOpenStatus ( hIMC, FALSE );
}
2. 映射 WM_CHAR 消息到 OnChar ()
void CBlogEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// nChar 的值在不同手机上可能有所不同
switch ( nChar )
{
// Up
case 50:
{
this->LineScroll ( -1 );
break;
}
// Down
case 56:
{
this->LineScroll ( 1 );
break;
}
// PageUp
case 52:
{
this->LineScroll ( -11 );
break;
}
// PageDown
case 54:
{
this->LineScroll ( 11 );
break;
}
}
// CEdit::OnChar(nChar, nRepCnt, nFlags);
}
———————————————————————————-
自己构造时间
———————————————————————————-
#include <windows.h>
#include <atltime.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
int _tmain(int argc, _TCHAR* argv[])
{
char buff[80];
__time64_t result;
CTime t(2008,4,28,22,18,39);
CString s = t.Format( _T("%A, %B %d, %Y") );
struct tm when;
t.GetLocalTm(&when);
when.tm_hour = when.tm_hour + 8;
if( (result = mktime( &when )) != (time_t)-1 )
{
asctime_s( buff, sizeof(buff), &when );
printf( "the time will be %s/n", buff );
}
else
{
printf( "mktime failed" );
}
}
———————————————————————————-
C++ 读写文件
———————————————————————————-
#include <fstream>
using namespace std;
…
struct AuthInfo auth_info; // AuthInfo 是自定义的 struct
string susername, spassword;
// 写
ZeroMemory ( &auth_info, sizeof ( auth_info ) );
susername = "tanggaowei@gmail.com";
spassword = "000000";
memcpy(auth_info.username, susername.c_str(), susername.length());
memcpy(auth_info.password, spassword.c_str(), spassword.length());
ofstream fout("mbc.dat", ios::binary);
fout.write((char *)(&auth_info), sizeof(auth_info));
fout.close();
// 读
ZeroMemory ( &auth_info, sizeof ( auth_info ) );
ifstream fin ( "mbc.dat", ios::binary );
fin.read((char *)(&auth_info), sizeof(auth_info));
susername = auth_info.username;
spassword = auth_info.password;
ZeroMemory ( auth_info.username, 100 ); // AuthInfo.username[100]
ZeroMemory ( auth_info.password, 50 ); // AuthInfo.password[50]
memcpy(auth_info.username, susername.c_str(), susername.length());
memcpy(auth_info.password, spassword.c_str(), spassword.length());
fin.close();
———————————————————————————-
获取应用程序路径
———————————————————————————-
CString CMiniBlogClientApp::GetModulePath(void)
{
CString sPath = _T("");
int max_len = 256;
LPTSTR lpszPath = new TCHAR[max_len];
::GetModuleFileName ( AfxGetInstanceHandle(), lpszPath, max_len );
sPath = lpszPath;
sPath.Replace ( _T("/"), _T("//") );
sPath = sPath.Left( sPath.ReverseFind ( _T(’//’) ) );
sPath += "//";
delete lpszPath;
lpszPath = NULL;
return sPath;
}
———————————————————————————-
无法解析的外部符号
———————————————————————————-
1. lib 文件未引入。
2. 类方法的实现未加类标识,如 CTest::Connect(void) 写成了 Connect(void)
3. 找不到 *.obj 文件。
添加 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;
———————————————————————————-
VS2005 C++ MFC 智能设备应用程序,怎样添加事件
———————————————————————————-
在“类视图”点击右键,打开属性页。属性页的最上一排按钮中有添加“事件”、“消息”等按钮。
———————————————————————————-
只允许一个应用程序实例运行
———————————————————————————-
// 创建一个名为“No Previous Instance”的命名互斥对象
if (!CreateMutex(NULL,TRUE,"No Previous Instance!"))
{
MessageBox(NULL,"创建Mutex失败!","NoPrev",MB_OK|MB_SYSTEMMODAL);
return FALSE;
}
// 是否已有一个实例在运行
if (GetLastError()==ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,"已有NoPrev的一个实例在运行, 当前实例将被终止!",
"NoPrev",MB_OK|MB_SYSTEMMODAL);
return FALSE;
}
———————————————————————————-
捕捉手机 Home 键 (虽然能捕捉到,但是好像最后还是执行了返回桌面操作)
———————————————————————————-
1. 注册热键
BOOL CMiniBlogClientDlg::OnInitDialog()
{
…
// 处理 VK_HOME
BYTE appkey = SHGetAppKeyAssoc(_T("MiniBlogClient.exe"));
::RegisterHotKey ( m_hWnd, appkey, MOD_WIN, VK_THOME);
…
}
2. 重写 PreTranslateMessage 函数
BOOL CMiniBlogClientDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if( pMsg->message == WM_HOTKEY )
{
SetForegroundWindow();
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
———————————————————————————-
为什么按 HOME 键后,MFC 智能设备应用程序的窗口在“任务管理器(CeleTask.exe)”里找不到
———————————————————————————-
在窗口编辑器里,将窗口的 style 属性修改为 Overlapped
———————————————————————————-
屏蔽 KeyDown 事件
———————————————————————————-
BOOL CBlogEdit::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if ( pMsg->message == WM_KEYDOWN )
{
return TRUE;
}
return CEdit::PreTranslateMessage(pMsg);
}
———————————————————————————-
关闭输入法
———————————————————————————-
HIMC hIMC = ImmGetContext( this->GetSafeHwnd() );
ImmSetOpenStatus ( hIMC, FALSE );
———————————————————————————-
在 CEdit 的扩展类中添加翻页功能
———————————————————————————-
1. 控件获得焦点时,屏蔽输入法
void CBlogEdit::OnSetFocus(CWnd* pOldWnd)
{
CEdit::OnSetFocus(pOldWnd);
// 关闭输入法
HIMC hIMC = ImmGetContext( this->GetSafeHwnd() );
ImmSetOpenStatus ( hIMC, FALSE );
}
2. 映射 WM_CHAR 消息到 OnChar ()
void CBlogEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// nChar 的值在不同手机上可能有所不同
switch ( nChar )
{
// Up
case 50:
{
this->LineScroll ( -1 );
break;
}
// Down
case 56:
{
this->LineScroll ( 1 );
break;
}
// PageUp
case 52:
{
this->LineScroll ( -11 );
break;
}
// PageDown
case 54:
{
this->LineScroll ( 11 );
break;
}
}
// CEdit::OnChar(nChar, nRepCnt, nFlags);
}
———————————————————————————-
自己构造时间
———————————————————————————-
#include <windows.h>
#include <atltime.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
int _tmain(int argc, _TCHAR* argv[])
{
char buff[80];
__time64_t result;
CTime t(2008,4,28,22,18,39);
CString s = t.Format( _T("%A, %B %d, %Y") );
struct tm when;
t.GetLocalTm(&when);
when.tm_hour = when.tm_hour + 8;
if( (result = mktime( &when )) != (time_t)-1 )
{
asctime_s( buff, sizeof(buff), &when );
printf( "the time will be %s/n", buff );
}
else
{
printf( "mktime failed" );
}
}
———————————————————————————-
C++ 读写文件
———————————————————————————-
#include <fstream>
using namespace std;
…
struct AuthInfo auth_info; // AuthInfo 是自定义的 struct
string susername, spassword;
// 写
ZeroMemory ( &auth_info, sizeof ( auth_info ) );
susername = "tanggaowei@gmail.com";
spassword = "000000";
memcpy(auth_info.username, susername.c_str(), susername.length());
memcpy(auth_info.password, spassword.c_str(), spassword.length());
ofstream fout("mbc.dat", ios::binary);
fout.write((char *)(&auth_info), sizeof(auth_info));
fout.close();
// 读
ZeroMemory ( &auth_info, sizeof ( auth_info ) );
ifstream fin ( "mbc.dat", ios::binary );
fin.read((char *)(&auth_info), sizeof(auth_info));
susername = auth_info.username;
spassword = auth_info.password;
ZeroMemory ( auth_info.username, 100 ); // AuthInfo.username[100]
ZeroMemory ( auth_info.password, 50 ); // AuthInfo.password[50]
memcpy(auth_info.username, susername.c_str(), susername.length());
memcpy(auth_info.password, spassword.c_str(), spassword.length());
fin.close();
———————————————————————————-
获取应用程序路径
———————————————————————————-
CString CMiniBlogClientApp::GetModulePath(void)
{
CString sPath = _T("");
int max_len = 256;
LPTSTR lpszPath = new TCHAR[max_len];
::GetModuleFileName ( AfxGetInstanceHandle(), lpszPath, max_len );
sPath = lpszPath;
sPath.Replace ( _T("/"), _T("//") );
sPath = sPath.Left( sPath.ReverseFind ( _T(’//’) ) );
sPath += "//";
delete lpszPath;
lpszPath = NULL;
return sPath;
}
———————————————————————————-
无法解析的外部符号
———————————————————————————-
1. lib 文件未引入。
2. 类方法的实现未加类标识,如 CTest::Connect(void) 写成了 Connect(void)
3. 找不到 *.obj 文件。
相关文章推荐
- VS2005 C++ 手机开发杂记(上)
- VS2005 C++ 手机开发杂记(下)
- cocos2d-x iOS和Android同步开发 手机设备适配问题解决
- Linux应用随笔(五)64位Debian8兼容运行32位adb开发android应用,并解决手机驱动问题
- 问题:在Win2003Server下VS2005编译的Dll出现Microsoft Visual C++ Debug Library异常
- Android 手机地图开发-高德地图问题
- 手机网站开发中需要注意的7个问题
- VS2005开发MFC使用多字节字符集引起主题问题
- 小议手机软件平台开发(4) - 政治问题
- Cocos2dx游戏开发系列笔记9:android手机上运行《战神传说》,并解决横竖屏即分辨率自适应问题
- Android JNI 开发中 C++的输出问题
- C++ ActiveX开发的问题讨论
- c#调用c++开发的dll const char* 返回值接收问题
- c#调用c++开发的dll const char* 返回值接收问题
- VS2005 开发wince6上的数据库的问题
- metro开发问题记录二:metro获取设备坐标方法(c++)
- 开发手机游戏遇到的一些问题及解决办法
- 关于小米4 以及酷派手机安卓开发 调用相机相册适配的问题
- 开发平台由VC6.0升级至VS2005,将碰到的问题