在 DNSAPI 中找不到 DNS 函数

DNS functions not found in DNSAPI

提问人:Johny Siemano Kolano 提问时间:7/18/2019 最后编辑:marc_sJohny Siemano Kolano 更新时间:7/31/2019 访问量:686

问:

我在开发应用程序时遇到了一个问题,即通过 mdns 浏览本地网络中的设备。在 Windows 7 下,我使用了苹果的 bonjour api,一切都很棒。将 win7 更新到 win10 后,bonjour 仍然可以找到设备,但无法解析与它们的连接。我找到了使用 Windows 10 Microsoft WINAPI 内部解决方案的解决方案,我发现:https://learn.microsoft.com/en-us/windows/win32/api/windns/nf-windns-dnsservicebrowse

整个DNS功能,如“DnsServiceBrowse”等。但是我无法将它们看到到“windns.h”标题中,就像在文档中指定的那样。即使在dnsapi.dll中,我也找不到这些函数的任何符号。我正在 Visual Studio 10.0.17763.0 下使用 SDK 2017。我的 Windows 10 版本是 1903。我错过了什么吗?

C++ C WinAPI MDNS

评论

0赞 Richard Critten 7/18/2019
桌面版还是通用版应用?该 API 仅适用于桌面应用。
0赞 Johny Siemano Kolano 7/18/2019
桌面应用程序,它类似于 LXI 发现工具
0赞 Castorix 7/18/2019
即使在dnsapi.dll中,我也找不到这些函数的任何符号取决于 Windows 10 1803
0赞 Johny Siemano Kolano 7/19/2019
okey,我在另一台带有 1803 Win 版本的计算机上检查过,我有符号。但我仍然需要一个有效的头文件,并且 MS 文档中的 windns.h 没有这些函数的声明,我想进行静态链接。我也可以尝试使用没有标题的动态,只使用文档中的定义,但这不是我想要实现的
0赞 Drake Wu 7/19/2019
解决方法是安装“Bonjour SDK for Windows”,然后在头文件中使用 。DNSServiceBrowsedns_sd.h

答:

0赞 SoronelHaetir 7/18/2019 #1

如果使用 Visual Studio,你是否确保你的项目实际使用的是你认为正在使用的 SDK 版本?默认项目设置使用找到的最早的 SDK。

该设置位于项目属性窗口的“常规”页下(“项目 ->属性”、“常规 -> Windows SDK 版本”)。

评论

0赞 Johny Siemano Kolano 7/19/2019
这是基本的东西,我的默认项目设置使用 10.0.17763.0 SDK,目标平台是 Windows 10,所有计算机都一样,只需看看您的计算机,并尝试使用 WINAPI 中的 DnsServiceBrowse 功能符合 MS 文档...
1赞 Drake Wu 7/24/2019 #2

它位于最新的 Windows SDK 10.0.18362.0 中。

enter image description here

0赞 Johny Siemano Kolano 7/31/2019 #3

问题解决了,对于无法正常工作的 Bonjour 版本,只需要重新安装 Bonjour 并且一切都可以再次工作,并且构建中的 Windows API 的解决方案是使用 SDK 10.0.18362.0 或更高版本。但是 Visual 2017 安装程序列表中没有那个 SDK,您必须自行卸载它,指定的 SDK 自 VS 2019 起可用(来自安装程序资源) 感谢 Drake Wu 的帮助!