【问题标题】:How do I use the windows network API in Qt?如何在 Qt 中使用 Windows 网络 API?
【发布时间】:2011-02-09 04:03:53
【问题描述】:

我将在我的 GUI 应用程序中放置一个网络状态图标。为了获得网络状态通知,我正在尝试使用 Windows API。为此,我想在我的应用程序中使用NetworkAvailabilityChangedEventHandler。我对使用 Windows API 和框架进行编程非常陌生。任何人都可以在以下事情上帮助我:

  1. APINetworkAvailabilityChangedEventHandle是否只能在C#中使用?
  2. 我可以在 C++ (Qt) 中使用它吗?
  3. 我必须包含哪个头文件? (我在 MSDN 中检查了这一点。但他们为此使用命名空间。所有示例都在 C# 中。我无法理解如何在我的 C++ 代码中实现它。)

如果有人能给我详细的代码 sn-p 以使用此 Windows 事件处理程序,包括要包含的 .h 文件或命名空间,我将不胜感激。

【问题讨论】:

    标签: c++ winapi qt network-programming


    【解决方案1】:

    您从哪里得到使用NetworkAvailabilityChangedEventHandler 委托的想法?

    这明确不是 Windows API 的一部分,而是.NET Framework 与NetworkChange.NetworkAvailabilityChanged event 一起使用的委托函数。这就解释了为什么 MSDN 上的所有示例都是用 C# 编写的——因为它只打算用于面向 .NET Framework 的应用程序。如果您使用 Qt 编写非托管 C++,那么您没有使用 .NET Framework,并且您无法利用它的功能。


    等效的 Windows API 是 InternetGetConnectedState function,它返回一个值,指示系统当前是否连接到 Internet。您会发现它的 MSDN 文档对非托管 C++ 开发人员更加友好,因为那是
    主要目标受众。您正在寻找的信息在底部给出:

    标题          Wininet.h

               Wininet.lib

    DLL Wininet.dll

    您可以找到所有 WinINet 函数的列表here

    【讨论】:

    • 这不是精确相同的东西,因为NetworkChange.NetworkAvailabilityChanged 是一个推送通知,而InternetGetConnectedState 是一个轮询API...
    • @bdonlan:你是对的。我确实说它是等价的,而不是完全一样的。 NetworkChange.NetworkAvailabilityChanged 实际上在后台轮询 InternetGetConnectedState 并向消费者实施推送通知。您可以通过 .NET 免费获得很多 Windows API 无法获得的东西。这并不能阻止提问者滚动他自己的投票功能,为此,他会使用InternetGetConnectedState
    • @cody Gray:非常感谢您对解决方案的快速响应。当我使用 API 'GetSystemPowerStatus' 时,我只是将 windows.h 文件包含在我的应用程序中,然后添加任何 dll 和 lib 文件。但是可以在我的代码中包含文件 wininet.h 吗?或者我需要使用lib和dll?如果可以,请告诉我如何在我的 qt 应用程序中使用它们?我需要找到 .lib 和 .dll 并将它们粘贴到我的 qt app 目录中还是提供路径?
    • @Surjya:您需要包含头文件并将wininet.lib 添加为项目的依赖项。您确实不需要将 DLL 文件复制到任何地方,因为它包含在标准 Windows 安装中。您的应用不应有自己的副本。在不知道您使用的是哪个 IDE/编译器的情况下,很难就如何添加依赖项提供更具体的说明。在 Visual Studio 中,右键单击您的项目并打开其属性窗口。然后展开“链接器”类别并选择“输入”。将wininet.dll 添加到“附加依赖项”行。
    • @Surjya:有关详细信息,请参阅this question
    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 2012-08-02
    • 2018-03-01
    • 2013-05-28
    • 2013-12-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多