我需要什么DLL和库才能使用"timeBeginPeriod"或"timeapi.h&qu



尽管许多Windows API函数存在于Windowsapp.lib或API集合中(请参阅Mingw-Gcc中如何声明和链接RoInitialize、RoUninitialize、RoGetActivationFactory和HSTRING函数的答案(,但许多函数未列为包含在WindowsApp.lib或扩展API中。

例如,timeBeginPeriod,我想用它来设置Sleep的分辨率。

它是Timeapi的一部分,在WindowsApp.lib或扩展API中可用的函数列表中没有提到它。文档中也没有提到任何API集合。

  • 是否链接到winmm.libwinmm.dll
  • 我包括Windows.h还是timeapi.h

我怎么知道?RoInitialize没有提到DLL或API集,但它有几种可用。

免责声明:我在微软工作

我想我应该自己研究一下。我写了一个小测试程序,并使用VS编译器进行测试。

  1. 通过Start,我启动了一个VS开发人员提示(还有其他方法,比如在从cmd运行cl.exe的答案中(
  2. 我写了一些简单的程序来测试各种情况

答案

我的实验表明,这个问题的答案并不一定很简单:

  • 是否链接到winmm.libwinmm.dll

您可以链接/使用winmm,但windowsapp.lib也足够了,尽管没有记录API函数是其中的一部分。

  • 我包括Windows.h还是timeapi.h

至少在我的实验中,Windows.h实际上需要使用timeBeginPeriod。CCD_ 17是不充分或不必要的。我不清楚为什么会这样。


以下是我如何得到这个答案的:

编译一个简单的程序

只是为了证明事情会编译:

#include <iostream>
int main()
{
std::cout << "Hello!" << std::endl;
}
>cl /EHsc srcapp.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 srcapp.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 srcapp.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 srcapp.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!

相关内容

  • 没有找到相关文章

最新更新