我想我会自己调查一下。我写了一个小测试程序,用VS编译器测试。
- 通过“开始”,我启动了一个 VS 开发人员提示(among other ways of doing that 就像对Run cl.exe from cmd 的回答一样)。
- 我编写了一些简单的程序来测试各种情况。
答案
我的实验表明,这个问题的答案并不一定简单:
- 我是否链接到
winmm.lib 和winmm.dll?
您可以链接/使用 winmm,但 windowsapp.lib 也足够了,尽管没有记录时间 API 函数是其中的一部分。
- 我是否包括
Windows.h 或timeapi.h?
至少在我的实验中,Windows.h 实际上需要使用timeBeginPeriod。 timeapi.h 不够或没有必要。我不清楚为什么会这样。
我是这样得到这个答案的:
编译一个简单的程序
只是为了证明事情会编译:
#include <iostream>
int main()
{
std::cout << "Hello!" << std::endl;
}
>cl /EHsc src\app.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29336 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
app.cpp
Microsoft (R) Incremental Linker Version 14.28.29336.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:app.exe
app.obj
> .\app.exe
Hello!
使用已知存在于 Windowsapp.lib 中的函数
#include <iostream>
#include <winstring.h>
int main()
{
std::cout << "Hello!" << std::endl;
// Ignore the poor error handling
HSTRING string;
WindowsCreateString(L"Test", 4, &string);
const auto len = WindowsGetStringLen(string);
std::cout << len << std::endl;
WindowsDeleteString(string);
}
> cl /EHsc windowsapp.lib src\app.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29336 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
app.cpp
Microsoft (R) Incremental Linker Version 14.28.29336.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:app.exe
windowsapp.lib
app.obj
> .\app.exe
Hello!
4
消费函数时间API函数(本题)
#include <iostream>
// Interestingly, timeapi.h does not work:
// #include <timeapi.h>
#include <Windows.h>
int main()
{
std::cout << "Hello!" << std::endl;
timeBeginPeriod(500);
}
链接winmm.lib:
> cl /EHsc winmm.lib src\app.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29336 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
app.cpp
Microsoft (R) Incremental Linker Version 14.28.29336.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:app.exe
winmm.lib
app.obj
> .\app.exe
Hello!
有趣的是,您也可以只链接 Windowsapp.lib:
> cl /EHsc windowsapp.lib src\app.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29336 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
app.cpp
Microsoft (R) Incremental Linker Version 14.28.29336.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:app.exe
windowsapp.lib
app.obj
> .\app.exe
Hello!