该如何使用GetSystemTime()??

jiongdy 2006-04-18 08:34:52
我在VC下建了一个win32 console工程,和一个c++文件
内容如下:
#include<stdlib.h>
#include<string.h>
#include<winbase.h>
#include<stdio.h>

void main()
{
LPSYSTEMTIME lpSystemTime;// address of system time structure
GetSystemTime(lpSystemTime);
printf("%s\n",lpSystemTime);

}
按照MSDN里说的加入了winbase.h文件。但是编译出现以下很多错误:
:\program files\microsoft visual studio\vc98\include\winbase.h(216) : error C2146: syntax error : missing ';' before identifier 'Internal'
d:\program files\microsoft visual studio\vc98\include\winbase.h(216) : error C2501: 'DWORD' : missing storage-class or type specifiers
d:\program files\microsoft visual studio\vc98\include\winbase.h(216) : error C2501: 'Internal' : missing storage-class or type specifiers
。。。。。。
winbase.h文件怎么会出错?
是不是哪里没有设置好呢?还是在这种工程环境下不能调用这个函数呢?
...全文
1319 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiongdy 2006-04-19
  • 打赏
  • 举报
回复
问题已解决
楼上批评正确
接受
zez 2006-04-19
  • 打赏
  • 举报
回复
void main()
{
LPSYSTEMTIME lpSystemTime;// 这里应该是结构体,不是指针,这样的话,内存在哪呢???肯定出错
GetSystemTime(lpSystemTime);
printf("%s\n",lpSystemTime);// 有你这么打印的么? 先学学c的基本知识,再问问题

}
YFY 2006-04-18
  • 打赏
  • 举报
回复



printf("%s\n",lpSystemTime);

这句有问题的,lpSystemTime是个结构体指针不能直接打印的。
YFY 2006-04-18
  • 打赏
  • 举报
回复
你那样使用有问题的,不如不要定义指针类型的变量,如下使用:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>


SYSTEMTIME sysTime;// address of system time structure
GetSystemTime(&sysTime);

printf("\n Get Current Time :%d-%d-%d %d:%d:%d:%d \n",
sysTime.wYear,
sysTime.wMonth,
sysTime.wDay,
sysTime.wHour,
sysTime.wMinute,
sysTime.wSecond,
sysTime.wMilliseconds);

system("pause");
ma100 2006-04-18
  • 打赏
  • 举报
回复
#include<winbase.h> ==> #include <windows.h>

GetSystemTime 是在winbase.h,但winbase.h中也要用一些函数和定义,除非你把所有的include都写出来,比如DWORD需要加入 windef.h
DLL的动态下载运行[返回] 中国计算机报2000年第21期 DLL的动态下载运行 业 宁   Lotus Domino 是网络上先进的群件和电子邮件服务器,与客户端应用 Lotus Notes 相配合,具有灵活的安全模式,支持任意大小的多企业构架,全域范围的搜索服务,支持对绝大部分企业系统级的实时访问,功能非常强大。但尺有所短,寸有所长,有时我们需要编制一些DLL来弥补其不足。但问题是这些DLL需要在本地机器上运行,我们不能手工地在每台机器上做拷贝,如果单位很大,工作站很多,或者有远程工作站,那么维护的工作量将非常巨大。下面介绍一种从Domino服务器上动态下载DLL到本地机器运行的方法。   使用操作系统的DLL   如果这些DLL是本地系统自己的API,则直接调用,这里我们举一个例子来说明。   我们要求程序运行时判断本地系统时间,如果系统时间是1999年9月9日,则要求系统退出。   1.在Declarations中,我们定义:   Rem 声明一个SYSTEMTIME的结构   Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer   End Type    Const WM—CLOSE = &H10   声明过程或函数,它们都是kernel32.dll 或user32.dll中的API。   Declare Sub GetLocalTime Lib ″kernel32″Alias ″GetLocalTime″ (lpSystemTime As SYSTEMTIME)   Declare Function GetActiveWindow Lib ″user32″ Alias ″GetActiveWindow″ () As Long   Declare Function CloseWindow Lib ″user32″ Alias ″CloseWindow″ (Byval hwnd As Long) As Long   Declare Function PostMessage Lib ″user32″ Alias ″PostMessageA″ (Byval hwnd As Long, Byval wMsg As Long, Byval wParam As Long, Byval lParam As Long) As Long   2.在Initialize事件中,我们键入如下代码:   Dim stime As SYSTEMTIME Dim hwnd As Long    Rem 取得当前活动窗口的句柄 hwnd=GetActiveWindow() Rem 取系统时间保存在SYSTEMTIME结构中    Call GetLocalTime(stime) If(stime.wyear=1999) And stime.wmonth=9 And stime.wDay=9 Then Messagebox(″谢谢使用!″,MB—OK+16,″再见″)    Rem 退出Notes Call postmessage(hwnd,WM—CLOSE,0,0) End If   使用用户编制的DLL   如果是用户编制的DLL,则调用起来稍微麻烦一点,因为本地机器上可能没有DLL,这就需要把它下载到本地。   可以在需要DLL的Notes数据库中增加一个表单或者在表单中增加一个域用于保存DLL。下面的这个例子是把两个动态链接库my—1.dll和my—2.dll存放在DLLForm域中,当用户运行服务器中的Notes数据库时,程序开始搜索本地机器的系统目录,如果发现两个动态链接库已经在本地,则不下载,否则开始下载。下面是设计步骤:   1.首先在Notes中建立一个名叫DllForm的表单,在表单中设计一个名叫DllInHere的RTF域,然后保存。    以DllForm这个表单生成一个文档,文档的DllInHere域中附加了my—1.dll和my—2.dll两个Dll。   2. 在Declaration 中我们声明:   Declare Function GetSystemDirectoryA Lib ″kernel32″ (Byval lpBuffer As String, Byval uSize As Long) As Long   3.在Initalize事件中键入如下代码:   Dim sysSize As Long Dim uSize As Long Dim sysPath As String uSize = 50   Rem 取得系统路径字符串的长度 sysSize=GetSystemDirectoryA(sysPath,uSize) Rem 给系统路径变量置初值,确定准确长度   For i=1 To sysSize sysPath=sysPath+″″ Next   Rem 取出Window的system目录或者Window NT的system32目录 sysSize=GetSystemDirectoryA(sysPath,uSize) Dim pathName1,pathName2 As String, fileName1,fileName2 As String Dim rtitem As Variant Dim collection As NotesDocumentCollection Set uidb = session.CurrentDatabase ′ Dim collection As NotesDocumentCollection pathName1 = syspath+″\my—1.dll″ pathName2 = syspath+″\my—2.dll″   Rem 判断本地系统是否已经下载 fileName1 = Dir$(pathName1, 0) fileName2 = Dir$(pathName2, 0) Rem 如果没有下载则从服务器下载 If fileName1 = ″″ Then search$ = { Form = ″DllForm″ } Set collection = uidb.Search( search$, Nothing, 0 ) If collection.Count = 0 Then Print ″No dll″ Rem 判断文档是否存在 End If    Rem 取得第一个文档中的 DllInHere域 Set pzdoc = collection.GetFirstDocument( ) Set rtitem = pzdoc.GetFirstItem( ″dll″ ) i=0    Rem 判断域类型 If ( rtitem.Type = RICHTEXT ) Then Forall o In rtitem.EmbeddedObjects If i=0 Then    Rem 下载第一个DLL到系统目录 Call o.ExtractFile (pathName1) i=1 End If If i=1 Then    Rem 下载第二个DLL到系统目录 Call o.ExtractFile(pathName2) End If End Forall End If End If   这样,DLL就下载到本地。DLL一旦下载完毕,应用程序就可以调用其中的函数了。   小结   在一个中等以上规模的企业中,网络中的节点往往有几百、上千个,客户端软件的升级是网络管理员最感到头疼的事,使用本文介绍的自动下载方法,可以极大地减轻管理员的工作负担。另外利用C++、VB等编制的DLL程序也是对Notes功能的一个有力补充。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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