尽管许多Windows API函数存在于Windowsapp.lib
或API集合中(请参阅Mingw-Gcc中如何声明和链接RoInitialize、RoUninitialize、RoGetActivationFactory和HSTRING函数的答案(,但许多函数未列为包含在WindowsApp.lib或扩展API中。
例如,timeBeginPeriod
,我想用它来设置Sleep
的分辨率。
它是Timeapi
的一部分,在WindowsApp.lib或扩展API中可用的函数列表中没有提到它。文档中也没有提到任何API集合。
- 是否链接到
winmm.lib
和winmm.dll
- 我包括
Windows.h
还是timeapi.h
我怎么知道?RoInitialize没有提到DLL或API集,但它有几种可用。
免责声明:我在微软工作
我想我应该自己研究一下。我写了一个小测试程序,并使用VS编译器进行测试。
- 通过Start,我启动了一个VS开发人员提示(还有其他方法,比如在从cmd运行cl.exe的答案中(
- 我写了一些简单的程序来测试各种情况
答案
我的实验表明,这个问题的答案并不一定很简单:
- 是否链接到
winmm.lib
和winmm.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!