急急急,vs2010调用CTime::GetCurrentTime()提示出错!

ATMCash4423 2011-07-30 07:34:11
代码全部贴上

BOOL COprHistClientDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HWND hWnd;
COPYDATASTRUCT cpd;
cpd.dwData = NULL;
cpd.cbData = NULL;
cpd.lpData = NULL;
hWnd=::FindWindowA(NULL,"操作记录消息发送者");
if(hWnd==NULL)
{
MessageBox("未找到SimuMMI");
}
else
{
switch(pCopyDataStruct->dwData)
{
case GetCopyDataMessage_LoginVerification://登录验证
{CString SQLstr,pw;
Login* pLogin = (Login*)(pCopyDataStruct->lpData);
CurrentOnlineUsers=pLogin->Account;
pw=pLogin->PW;
//SQLstr.Format("select * from operator where account='%s'",CurrentOnlineUsers);
SQLstr.Format("select * from operator where account='%s'",pLogin->Account);
G_READO.Rec(SQLstr);

if (!G_READO.IsRecEmpty())
{
//G_READO.RecClose();
//CTime timeNow;
int nYear, nMonth, nDate,nh,nm,ns;
char timeTemp[timeTempValue];
sprintf_s(timeTemp,"20%s",G_READO.GetFieldValue("OnlineDate"));//加入_s的与不加的区别在于加入的有非法的格式化字符串直接跳出
sscanf_s(timeTemp, "%d-%d-%d", &nYear, &nMonth, &nDate);
sscanf_s(G_READO.GetFieldValue("OnlineTime"),"%d:%d:%d",&nh,&nm,&ns);
CTime timeData(nYear, nMonth, nDate,nh,nm,ns);
//timeNow=CTime::GetCurrentTime();跟踪到此弹出debug错误窗口
SYSTEMTIME stUTC;//用这个也一样!跟踪到此弹出debug错误窗口
//::GetSystemTime(&stUTC);
::GetLocalTime(&stUTC);
CTime timeNow(stUTC);
nYear=stUTC.wYear;
CTimeSpan ts=timeNow-timeData;

if(G_READO.GetFieldValue("pw")!=pw)
{
//MessageBox("密码错误");
cpd.dwData = CopyDataLogin_PWorUSER_ERROR;
::SendMessageTimeout(hWnd,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd,SMTO_ABORTIFHUNG,SendMessageTimeout_time,NULL);
cpd.dwData = NULL;
CurrentOnlineUsers.Format("");
}
else if (G_READO.GetFieldValue("OnlineStatus")!="0")
{
if(ts.GetDays()==0)
{
if(ts.GetMinutes()<=Offline)//设置判断超时时间的长度,单位分钟
{
//MessageBox("此用户当前在线");
cpd.dwData = CopyDataLogin_Online_ERROR;
::SendMessageTimeout(hWnd,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd,SMTO_ABORTIFHUNG,SendMessageTimeout_time,NULL);
cpd.dwData = NULL;
CurrentOnlineUsers.Format("");
}
else
{
//MessageBox("大于1分钟,视为已经掉线,并允许正常登陆");
cpd.dwData = CopyDataLogin_Pass;
G_READO.RecClose();
SQLstr.Format("update operator set OnlineStatus='-1' where account='%s'",CurrentOnlineUsers);
G_READO.Rec(SQLstr);
::SendMessageTimeout(hWnd,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd,SMTO_ABORTIFHUNG,SendMessageTimeout_time,NULL);
cpd.dwData = NULL;
}
}
else
{
//MessageBox("日期大于等于1天,表示已经掉线,允许正常登陆");
cpd.dwData = CopyDataLogin_Pass;
G_READO.RecClose();
SQLstr.Format("update operator set OnlineStatus='-1' where account='%s'",CurrentOnlineUsers);
G_READO.Rec(SQLstr);
::SendMessageTimeout(hWnd,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd,SMTO_ABORTIFHUNG,SendMessageTimeout_time,NULL);
cpd.dwData = NULL;
}
}
else
{
//当前用户不在线
cpd.dwData = CopyDataLogin_Pass;
G_READO.RecClose();
SQLstr.Format("update operator set OnlineStatus='-1' where account='%s'",CurrentOnlineUsers);
G_READO.Rec(SQLstr);
::SendMessageTimeout(hWnd,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd,SMTO_ABORTIFHUNG,SendMessageTimeout_time,NULL);
cpd.dwData = NULL;
}
}
else
{
//用户名错误
//MessageBox("用户名错误");
cpd.dwData = CopyDataLogin_PWorUSER_ERROR;
::SendMessageTimeout(hWnd,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd,SMTO_ABORTIFHUNG,SendMessageTimeout_time,NULL);
cpd.dwData = NULL;
CurrentOnlineUsers.Format("");
}
G_READO.RecClose();}
break;

case GetCopyDataMessage_OnlineVerification://接收在线验证消息
{
if (CurrentOnlineUsers!="")
{
int dy,dm,dd,th,tm,ts;
char dateTemp[dateTempValue],timeTemp[timeTempValue];
CString SQLstr;
CTime timeNow;
timeNow=CTime::GetCurrentTime();
dy=timeNow.GetYear();
dm=timeNow.GetMonth();
dd=timeNow.GetDay();
th=timeNow.GetHour();
tm=timeNow.GetMinute();
ts=timeNow.GetSecond();
sprintf_s(dateTemp,"%d-%d-%d",dy,dm,dd);
sscanf_s(dateTemp,"20%d-%d-%d",&dy,&dm,&dd);
sprintf_s(dateTemp,"%d-%d-%d",dy,dm,dd);
sprintf_s(timeTemp,"%d:%d:%d",th,tm,ts);
SQLstr.Format("update operator set OnlineDate='%s',OnlineTime='%s' where account='%s'",dateTemp,timeTemp,CurrentOnlineUsers);
G_READO.Rec(SQLstr);
}
}
break;

case GetCopyDataMessage_LogoutVerification://注销当前用户
{
if (CurrentOnlineUsers!="")
{
CString SQLstr;
SQLstr.Format("update operator set OnlineStatus='0' where account='%s'",CurrentOnlineUsers);
G_READO.Rec(SQLstr);
CurrentOnlineUsers.Format("");
}
}
break;

case GetCopyDataMessage_OperationRecords://接收操作记录
{
if (CurrentOnlineUsers!="")
{
CString Device,Description,time,SQLstr,flow;
Rec* pRec = (Rec*)(pCopyDataStruct->lpData);
flow.Format("%d",pRec->Flow);
Device=pRec->Device;
Description=pRec->Description;

int dy,dm,dd,th,tm,ts;
char dateTemp[dateTempValue],timeTemp[timeTempValue];
CTime timeNow;
timeNow=CTime::GetCurrentTime();
dy=timeNow.GetYear();
dm=timeNow.GetMonth();
dd=timeNow.GetDay();
th=timeNow.GetHour();
tm=timeNow.GetMinute();
ts=timeNow.GetSecond();
sprintf_s(dateTemp,"%d-%d-%d",dy,dm,dd);
sscanf_s(dateTemp,"20%d-%d-%d",&dy,&dm,&dd);
sprintf_s(dateTemp,"%d-%d-%d",dy,dm,dd);
sprintf_s(timeTemp,"%d:%d:%d",th,tm,ts);


if(Device!="" && Description!="")
{
SQLstr.Format("INSERT INTO rec(OperatorName,flow,OperDate,OperTime,device,description) values('%s','%s','%s','%s','%s','%s')"
,CurrentOnlineUsers,flow,dateTemp,timeTemp,Device,Description);
G_READO.Rec(SQLstr);
G_READO.RecClose();
}
else
{
MessageBox("设备名和操作记录不能为空");
}
}
}
break;

default:
break;
}
}

return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
}

我在copydata消息里加入了获取当前时间函数,结果运行时弹出debug错误窗口
timeNow=CTime::GetCurrentTime();跟踪到此弹出debug错误窗口
SYSTEMTIME stUTC;//用这个也一样!跟踪到此弹出debug错误窗口

网上找了半天也找不到原因!请教明白人!!
...全文
561 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dorami2010 2013-05-18
  • 打赏
  • 举报
回复
同问,有这个问题
roy971577501 2012-05-29
  • 打赏
  • 举报
回复
同问啊!我的也没有啊,在数据库中将 时间和id设为了关键字, 就是得不到系统时间 ,也没法实时更新数据库,求大牛解释解释!也是在vs2010 中
oppo_py 2011-11-08
  • 打赏
  • 举报
回复
麻烦帮我解释下,为什么我的VS2010中根本GetCurrentTime()函数啊,写了CTime::后面根本就没有那个getcurrenttime函数啊
ATMCash4423 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 stjay 的回复:]
sprintf_s参数填不对吧,注意第二个参数,注释也不对
_s系列的函数都是为了防止溢出
[/Quote]
终于找到原因了,原来不是timeNow=CTime::GetCurrentTime();这句有问题,而是在初始化timedata对象时CTime timeData(nYear, nMonth, nDate,nh,nm,ns)传进的参数是空的,所以出了问题~
stjay 2011-07-30
  • 打赏
  • 举报
回复
sprintf_s参数填不对吧,注意第二个参数,注释也不对
_s系列的函数都是为了防止溢出
ATMCash4423 2011-07-30
  • 打赏
  • 举报
回复
没人知道么?顶!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧