在线等!关于GetSystemTimes函数未定义的问题

槐芽 2012-03-07 02:24:40
最近在做的一个东西用到了GetSystemTimes函数,在MSDN上查过后知道它是包含在winbase.h头文件里面。
但是在用的过程中,就算我添加了#inclue <winbase.h>,编译时也还是提示GetSystemTimes函数未定义。

在本地计算机进行搜索后,发现在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include中的winbase.h里面有这个函数,但系统每次都找到的都是C:\Program Files\Microsoft Visual Studio\VC98\Include中的winbase.h。

尝试了两种方法改正:
1、将正确的winbase.h文件拷到project目录下,代码中改为#include "winbase.h",依然找的是C:\Program Files\Microsoft Visual Studio\VC98\Include中的winbase.h,失败;

2、在Tools->Options->Directories中将C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include换到最上方,又出现另一个错误:cannot open include file 'sal.h',仍然失败。

请问各位大侠,是我引用头文件方法不对吗?还是别的什么原因?希望哪位知道的大侠指条明路给我吧,不胜感激~~~
...全文
965 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
槐芽 2014-06-11
  • 打赏
  • 举报
回复
好久没来,原来结贴了也可以回复,我不是回复说了么,是sdk的版本太低了,升级下sdk就好了啊
神奇非凡 2014-01-02
  • 打赏
  • 举报
回复
引用 33 楼 yaoyaoli1 的回复:
[quote=引用 32 楼 chenhongbing2010 的回复:] 楼主,我也遇到这个问题了,能告诉下你是怎么解决的吗
我也遇到了,你解决了吗[/quote]求教,你们都解决了吗?
renyaow 2013-12-25
  • 打赏
  • 举报
回复
引用 32 楼 chenhongbing2010 的回复:
楼主,我也遇到这个问题了,能告诉下你是怎么解决的吗
我也遇到了,你解决了吗
chenhongbing2010 2013-12-03
  • 打赏
  • 举报
回复
楼主,我也遇到这个问题了,能告诉下你是怎么解决的吗
  • 打赏
  • 举报
回复
参照MSDN说明 Requirements Client: Included in Windows XP SP1. Server: Included in Windows Server 2003. Header: Declared in Winbase.h; include Windows.h. Library: Use Kernel32.lib. 发现接口是在 Winbase.h 文件中声明的,就打开看看,发现声明如下: #if _WIN32_WINNT >= 0x0501 BOOL WINAPI GetSystemTimes( LPFILETIME lpIdleTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime ); #endif // (_WIN32_WINNT >= 0x0501) 注意,这个宏 #if _WIN32_WINNT >= 0x0501 ,它的意思是,只有当windows版本高于0x0501,也就是WinXP SP1时,声明才有效,原来如此! 修改头文件声明为: #define _WIN32_WINNT 0x0501 #include <Windows.h>
guowenbo19911011 2013-04-07
  • 打赏
  • 举报
回复
楼主 怎么解决的,我也遇到这个问题
槐芽 2012-03-15
  • 打赏
  • 举报
回复
问题找到原因了,是我的SDK版本太低了,要升级下SDK才会有GetSystemTimes这个函数。
谢谢大家的帮助哈~尤其是zhao4zhong1,散分~
槐芽 2012-03-15
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 legionalways 的回复:]

了GetSystemTimes
楼主函数名写错了。
是GetSystemTime
[/Quote]

不是哦,这是两个不一样的函数,我没写错
槐芽 2012-03-15
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 ltqin 的回复:]

引用 18 楼 rabbiting 的回复:

引用 15 楼 ltqin 的回复:
引用 11 楼 rabbiting 的回复:

引用 10 楼 ltqin 的回复:

可能是VC6生成的程序吧,将_WIN32_WINNT定义 为0x0400 或0x0500


不好意思,请问应该在哪里将_WIN32_WINNT定义 为0x0400 或0x0500?

一般在 std……
[/Quote]

我要用的就是GetSystemTimes函数,没写错
legionalways 2012-03-15
  • 打赏
  • 举报
回复
了GetSystemTimes
楼主函数名写错了。
是GetSystemTime
ltqin 2012-03-15
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 rabbiting 的回复:]

引用 15 楼 ltqin 的回复:
引用 11 楼 rabbiting 的回复:

引用 10 楼 ltqin 的回复:

可能是VC6生成的程序吧,将_WIN32_WINNT定义 为0x0400 或0x0500


不好意思,请问应该在哪里将_WIN32_WINNT定义 为0x0400 或0x0500?

一般在 stdafx.h中,如果没有自己定义

你看看winb……
[/Quote]

是GetSystemTime()函数,而不是GetSystemTimes()函数啊,后面没有s
Lactoferrin 2012-03-14
  • 打赏
  • 举报
回复
#include <windows.h>
赵4老师 2012-03-14
  • 打赏
  • 举报
回复
查Kernel32.dll和Kernel32.lib中是否有GetSystemTimes导出函数用命令行
dumpbin.exe /EXPORTS Kernel32.lib | find "GetSystemTimes"
dumpbin.exe /EXPORTS Kernel32.dll | find "GetSystemTimes"
赵4老师 2012-03-14
  • 打赏
  • 举报
回复
以及你链接器链接时用的Kernel32.lib里面也有这个导出函数!
赵4老师 2012-03-14
  • 打赏
  • 举报
回复
Requirements
Client
Requires Windows Vista or Windows XP SP1.

Server
Requires Windows Server 2008 or Windows Server 2003.

Header
Declared in Winbase.h; include Windows.h.

Library
Use Kernel32.lib.

DLL
Requires Kernel32.dll.


前提是你使用的操作系统中的Kernel32.dll中有这个导出函数!
槐芽 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dyangrun 的回复:]
放到当前目录下用""都搞不定是不是应该换个编译器试试,或者重装一下!
[/Quote]

编译器是不能换了,重装过了,也没用
槐芽 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhao4zhong1 的回复:]
查MSDN是Windows程序员必须掌握的技能之一。
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/sysinfo/base/getsystemtimes.htm
GetSystemTimes Function

Retrieves system timing information. On a multiprocessor system, the va……
[/Quote]

查过了,具体原因不是在这里
槐芽 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ltqin 的回复:]
引用 11 楼 rabbiting 的回复:

引用 10 楼 ltqin 的回复:

可能是VC6生成的程序吧,将_WIN32_WINNT定义 为0x0400 或0x0500


不好意思,请问应该在哪里将_WIN32_WINNT定义 为0x0400 或0x0500?

一般在 stdafx.h中,如果没有自己定义

你看看winbase.h文件,如果_WIN32_WINN……
[/Quote]

我检查过了,那个winbase.h文件中就根本没有GetSystemTimes这串字符,搜索不到。
BirdyHuman 2012-03-08
  • 打赏
  • 举报
回复
不那是没有头文件吧
#include <atltime.h> 你加进去看下应该是可以的哦!
MSDN上面很明确说明了 要加这个头文件的
taoyh2002 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhao4zhong1 的回复:]
查MSDN是Windows程序员必须掌握的技能之一。
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/sysinfo/base/getsystemtimes.htm
GetSystemTimes Function

Retrieves system timing information. On a multiprocessor system, the va……
[/Quote]
Remarks
To compile an application that uses this function, define _WIN32_WINNT as 0x0501 or later. For more information, see Using the Windows Headers.

可以在工程设置里定义
工程属性--〉C/C++ --> Preprocessor --> Preprocessor Definitions里加上_WIN32_WINNT=0x0501
加载更多回复(15)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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