【问题标题】:Interlocked Singly Linked Lists (SList) with MinGW与 MinGW 互锁的单链表 (SList)
【发布时间】:2012-05-22 07:30:14
【问题描述】:

当我尝试将我的 Win32 代码从 Microsoft 工具链移植到 MinGW 时,大多数代码都能正常编译,但也有少数例外。在 MinGW 中似乎缺少的一个特定 API 是 SList API(包括 InitializeSListHead、InterlockedPushEntrySList)——当我编译我的源代码时,我收到关于未定义这些函数的错误。我该怎么做才能拥有这个 在 MinGW 下可用的 API?是否有一些我可以更新的 Win32 SDK 或类似的东西?

【问题讨论】:

  • 我推荐Mingw-w64,它的库比mingw完整得多。

标签: c++ winapi mingw


【解决方案1】:

当前 MinGW(基于 GCC 4.6.2)已经包含 SList API,但您需要通过defining a preprocessor value _WIN32_WINNT=0x0501 或更高版本(表示 Windows Server 2003 SP1、Windows XP SP2)。

【讨论】:

    【解决方案2】:

    转到http://equation.com 并使用最新的 gcc 4.8+ 下载他们完美的 MinGW 构建

    来自 winbase.h(在等式的 MinGW/include 中):

    #if defined(_SLIST_HEADER_) && !defined(_NTOSP_)
      WINBASEAPI VOID WINAPI InitializeSListHead(PSLIST_HEADER ListHead);
      WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER ListHead);
      WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER ListHead,PSLIST_ENTRY ListEntry);
      WINBASEAPI PSLIST_ENTRY WINAPI InterlockedFlushSList(PSLIST_HEADER ListHead);
      WINBASEAPI USHORT WINAPI QueryDepthSList(PSLIST_HEADER ListHead);
    #endif /* _SLIST_HEADER_ && !_NTOSP_ */
    

    【讨论】:

    • 请不要推荐GCC开发版本。
    • 我已经检查了他们的最后一个稳定版本(基于 4.7),它也已经包含 SList API(如果这个 MinGW 发行版需要 _WIN32_WINNT,我没有尝试)。
    【解决方案3】:

    QueryDepthSList(); 在 4.7.1 标头中缺失。其他功能都在那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2010-09-16
      • 1970-01-01
      • 2010-09-14
      • 2017-01-06
      • 2012-08-27
      相关资源
      最近更新 更多