使用GetProcessTimes和FileTimeToSystemTime的CPU处理时间在64位win中不起作用

时间:2010-06-18 17:00:26

标签: c++ windows 32bit-64bit cpu-time

我正在尝试测量CPU时间。 它在Win 32上运行良好,但在64位上,它说:

error LNK2019: unresolved external symbol __imp_GetProcessTimes referenced in function "unsigned int __cdecl getWINTime(void)" (?getWIN32Time@@YAIXZ) 

FileTimeToSystemTime

有类似的错误
error LNK2019: unresolved external symbol __imp_FileTimeToSystemTime referenced in function "unsigned int __cdecl getWINTime(void)" (?getWIN32Time@@YAIXZ)

功能本身并不重要,它没有问题 这种调用在64位架构中是合法的还是什么?

这不是唯一一个看起来没有正确链接到64位窗口上的库的问题 我应该设置一个设置才能正确链接吗?

3 个答案:

答案 0 :(得分:2)

您是否为两个环境的构建设置列出了相同的导入库。这两个函数都在kernel32.dll中。

答案 1 :(得分:1)

检查链接器标志。 64位版本的整个项目配置与32位版本的不同。因此,请检查您的项目设置,以验证它们是否都链接到相同的库。

还要检查编译器和链接器是否已正确调用,方法是检查项目设置中的命令行窗格,或检查构建日志。

我刚尝试在Visual Studio 2010中创建此代码的64位版本,并且工作正常:

#include <Windows.h>

int CALLBACK WinMain(
  __in  HINSTANCE hInstance,
  __in  HINSTANCE hPrevInstance,
  __in  LPSTR lpCmdLine,
  __in  int nCmdShow
) {
  FILETIME ct;
  FILETIME et;
  FILETIME kt;
  FILETIME ut;
  GetProcessTimes(NULL, &ct, &et, &kt, &ut);

  SYSTEMTIME st;
  FileTimeToSystemTime(&ut, &st);

}

我只是创建了一个新的Win32项目,添加了一个64位平台并进行了编译。我根本没有改变任何项目设置。

答案 2 :(得分:0)

GetProcessTimes和FileTimeToSystemTime的文档将告诉您要包​​含的标头,以及要链接的库文件。但是,Visual Studio通常会自动为您链接。 您是否忽略了项目中可能检查的默认库?