SYSTEMTIME oNow;
int oYear,oWeek,oMonth,oDate,oHour,oMinute,oSecond;
//GetSystemTime(&Now); 
GetLocalTime(&oNow);oYear = oNow.wYear;
oWeek = oNow.wDayOfWeek;
oMonth = oNow.wMonth;
oDate = oNow.wDay;
oHour = oNow.wHour;
oMinute = oNow.wMinute;
oSecond = oNow.wSecond;代码如上,但是各变量获得的值不对。
比如今天是2008年5月6日,oNow的值对的,oNow.wYear=2008,oNow.wDayofWeek=2,oNow.wMonth=5,oNow.wDay=6 
此时oYear=2008,oWeek=5,oMonth=6,oDate=5晕了,不晓得怎么回事。
系统是XP,用VC++ 6.0写的一个DLL程序

解决方案 »

  1.   

    //设置当前时间
    DllExport int SetNowTime()
    {
    SYSTEMTIME oNow;
    unsigned int oYear,oWeek,oMonth,oDate,oHour,oMinute,oSecond;
    //GetSystemTime(&Now); 
    GetLocalTime(&oNow); oYear = oNow.wYear;
    oWeek = oNow.wDayOfWeek;
    oMonth = oNow.wMonth;
    oDate = oNow.wDay;
    oHour = oNow.wHour;
    oMinute = oNow.wMinute;
    oSecond = oNow.wSecond; //年、星期、月、日、时、分、秒 06071231100000 06年 星期天 12月31日 10点整
    unsigned char datetime1[7];
    datetime1[0] = oYear;
    datetime1[1] = oWeek;
    datetime1[2] = oMonth;
    datetime1[3] = oDate;
    datetime1[4] = oHour;
    datetime1[5] = oMinute;
    datetime1[6] = oSecond;
    unsigned char datetime2[7] = {06071231100000};
    unsigned char datetime3[7] = {0x06,0x07,0x12,0x31,0x00,0x00,0x00}; int st;
    st = dc_disp_mode(hdev,1); //控制显示格式 0 年-月-日 1 时-分-秒
    if (st!=0)
    return 54; st = dc_settime(hdev,datetime1);
    if (0!=st)
    return 53; return 0;
    }
      

  2.   

    App代码
    void CProject1Dlg::OnSysTime() 
    {
    HINSTANCE hDll;
    PFUN pFun;
    hDll = LoadLibrary("SysTime.dll");
    pFun =(PFUN) GetProcAddress(hDll,"SetNowTime");
    pFun();
    FreeLibrary(hDll);
    }
    Dll代码
    DllExprot int SetNowTime() 

    SYSTEMTIME oNow; 
    unsigned int oYear,oWeek,oMonth,oDate,oHour,oMinute,oSecond; 
    //GetSystemTime(&Now);  
    GetLocalTime(&oNow); 

    oYear = oNow.wYear; 
    oWeek = oNow.wDayOfWeek; 
    oMonth = oNow.wMonth; 
    oDate = oNow.wDay; 
    oHour = oNow.wHour; 
    oMinute = oNow.wMinute; 
    oSecond = oNow.wSecond; 

    //年、星期、月、日、时、分、秒 06071231100000 06年 星期天 12月31日 10点整 
    unsigned char datetime1[7]; 
    datetime1[0] = oYear; 
    datetime1[1] = oWeek; 
    datetime1[2] = oMonth; 
    datetime1[3] = oDate; 
    datetime1[4] = oHour; 
    datetime1[5] = oMinute;
    datetime1[6] = oSecond;
    // unsigned char datetime2[7] = {06071231100000}; 
    // unsigned char datetime3[7] = {0x06,0x07,0x12,0x31,0x00,0x00,0x00}; 

    // int st; 
    // st = dc_disp_mode(hdev,1); //控制显示格式 0 年-月-日 1 时-分-秒 
    // if (st!=0) 
    // return 54; 

    // st = dc_settime(hdev,datetime1); 
    // if (0!=st) 
    // return 53; 

    return 0; 
    }
    我在自己的机器上运行通过,没有问题,请lz检查下其他原因,抑或是RP问题。
      

  3.   

    unsigned char datetime1[7]; //unsigned char在32位的系统上最大值是255 
    datetime1[0] = oYear; //你取得的年大于255,如2008年,被截断了。
      

  4.   

    //**************************************************************
    //函数名称:进制转换
    //函数说明:16进制转换为10进制,如50-->80,5*16+0*16
    //入口参数:需要转换的数值
    //出口参数:转换后的数值
    //**************************************************************
    unsigned char HexToTen(unsigned short s)

    unsigned short nHex=0; 
    int i,t; 
    char strHex[2];
    if(s>=0&&s<=9) 
    nHex=nHex*16+s; 
    else
    {
    itoa(s,strHex,10);
    for(i=0;strHex[i];i++) 

    if(strHex[i]<='9')
    t=strHex[i]-'0'; 
    else
    t=strHex[i]-'a'+10; 
    nHex=nHex*16+t;
    }


    return (unsigned char)nHex;
    } DllExport int SetNowTime()
    {
    unsigned char oYear,oWeek,oMonth,oDate,oHour,oMinute,oSecond;
    SYSTEMTIME oNow;
    GetLocalTime(&oNow); //进行十六进制到十进制的转换
    oYear = HexToTen(oNow.wYear-2000);
    oWeek = (unsigned char)oNow.wDayOfWeek;
    oMonth = HexToTen(oNow.wMonth);
    oDate = HexToTen(oNow.wDay);
    oHour = HexToTen(oNow.wHour);
    oMinute = HexToTen(oNow.wMinute);
    oSecond = HexToTen(oNow.wSecond);
    //年、星期、月、日、时、分、秒 06071231100000 06年 星期天 12月31日 10点整
    unsigned char datetime1[7];
    datetime1[0] = oYear;
    datetime1[1] = oWeek;
    datetime1[2] = oMonth;
    datetime1[3] = oDate;
    datetime1[4] = oHour;
    datetime1[5] = oMinute;
    datetime1[6] = oSecond; int st;
    st = dc_disp_mode(hdev,1); //控制显示格式 0 年-月-日 1 时-分-秒
    if (st!=0)
    return 54; //年、星期、月、日、时、分、秒 06071231100000 06年 星期天 12月31日 10点整
    //unsigned char datetime1[7] = {0x06,0x07,0x12,0x31,0x00,0x00,0x00};
    st = dc_settime(hdev,datetime1);
    if (0!=st)
    return 53; return 0;
    }最后的定版,希望对大家有帮助。