【问题标题】:GetOverlappedResultEx could not be located in kernel32.dllGetOverlappedResultEx 无法位于 kernel32.dll 中
【发布时间】:2016-02-28 13:38:55
【问题描述】:

我正在尝试创建一个使用 dll 进行管道通信的应用程序,并在我开始使用此函数 GetOverlappedResultEx 时遇到此错误。每当我运行使用我的 dll 的可执行文件时,我都会收到此错误消息...有谁知道它的含义是什么?我正在构建 64 位 dll!我在 Visual Studio 2012 上使用 C++。我需要安装任何服务包吗? 编辑:我使用的是 Windows 7 计算机

【问题讨论】:

  • 您在哪个平台上运行您的应用程序?
  • 关于 Service Pack 的评论:它不会解决这个特定问题,但值得注意的是 VS 2012、VS 2013 和 VS 2015 面向 Windows 7 Service Pack 1,而不是 Windows 7即时通讯。在 VS 2015 中,C++ REDIST 包将无法在 Windows 7 RTM 上安装。 Windows 7 RTM 不再是 lifecycle,因此 Windows 7 Service Pack 1 是必需的。

标签: c++ visual-studio-2012 dll kernel named-pipes


【解决方案1】:

该消息意味着代码的某些部分依赖于 GetOverlappedResultEx,它预期存在于系统 DLL kernel32.dll 中的函数。 (kernel32.dll 中的 32 指的是 32 位版本的 Windows API,即使是 64 位程序也是如此。)

要弄清楚发生了什么,请在 MSDN 中搜索该函数。在该页面上,您可以看到 GetOverlappedResultEx 确实应该来自 kernel32.dll,但它并未在 Windows 8 之前添加到 API。您可能试图在旧版本的 Windows 上运行该程序。

您的选择是在较新版本的 Windows 上运行程序或修改代码以不依赖此特定功能。

【讨论】:

    【解决方案2】:

    如果您的最低目标是 Windows 7,那么您应该将 _WIN32_WINNT 设置为 0x0601 作为预处理器定义。 Windows 8 SDK 或更高版本默认为“最新”而不是“最旧”设置,用于此主标题控件,VS 2012 为0x0602 (Windows 8)。许多 API 标头依赖此定义来控制特定于平台的行为,以支持操作系统的“低级”版本。见Using Windows Headers

    GetOverlappedResultEx 仅在 Windows 8 或更高版本上受支持。如果你想兼容Windows 7,那么你需要坚持GetOverlappedResult

    对于 Windows 8 应用商店、Windows phone 8 和通用 Windows 应用,您需要使用 GetOverlappedResultEx。因此,如果您正在编写可在这两个平台上重用的代码,您可以回到我们的朋友_WIN32_WINNT。例如,在WaveBankReader.cppDirectX Tool Kit 中,我使用以下内容来支持 Windows Vista 或更高版本的 Windows 桌面、Windows 8 应用商店、Windows phone 8 和通用 Windows 应用程序:

    #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
        BOOL result = GetOverlappedResultEx( hFile.get(), &request, &bytes, INFINITE, FALSE );
    #else
        if ( wait  )
            (void)WaitForSingleObject( m_event.get(), INFINITE );
    
        BOOL result = GetOverlappedResult( hFile.get(), &request, &bytes, FALSE );
    #endif
    

    如果先前的ReadFileERROR_IO_PENDING 失败而设置的变量,我在“下级”情况下对WaitForSingleObject 进行了显式调用。 GetOverlappedResultEx 处理这种情况。

    Dual-use Coding Techniques

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 2011-07-17
      • 2010-11-12
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多