为什么链接时程序会在 DllMain() 中崩溃 Xinput.lib

Why would a program crash in DllMain() when linking Xinput.lib

我创建了一个输入库,并且 link 和 xinput.lib。在执行任何用户代码之前,使用我的输入库的程序在启动时崩溃,因此很难调试。程序在 xinput dll 加载期间崩溃,这似乎发生在我的库生成的 dllmain 函数中。我在崩溃中得到的错误是“xinput:一个无效的参数被传递给了一个将无效参数视为错误的函数”。如果我在我的输入库中添加一个空的 dllmain 函数,一切都会正常工作并且不会崩溃。当不存在 dllmain 函数时,可能导致崩溃的原因是什么。似乎这是某种损坏,与 xinput 无关。然而,在崩溃之前没有执行任何用户代码,所以我不知道它可能是什么。有什么想法吗?我在 windows 11,我正在使用 visual studio 2022 和 clang-cl 工具链。我还想指出,当我使用 VS 2019 和 windows 10 时,这从来都不是问题。这可能是新工具链或 os 的问题吗?谢谢。

编辑 1:

下面是当我的库中没有 dllmain 时堆栈跟踪的样子:

当我在我的库中取消注释那个空的 DllMain 时,没有崩溃并且一切正常。没有意义,因为 DllMain 什么都不做。

编辑 2:

我可以确认这种完全相同的行为适用于 link 到 Xinput.lib 的完整空项目。具有简单 main() 函数的准系统控制台应用程序,该函数从引用 Xinput.lib

的空白库中调用一个函数

我可以确认这一定是最新的 clang-cl 工具链中的一个错误(大约 2 年前,当我在这个项目上投入大量精力时,它就起作用了)。使用 msvc 工具链后,一切正常。我将向 Microsoft Visual Studio.

提交错误报告