Visual c++ 在什么情况下,Windows上的非增量链接会导致抛出异常,而增量链接不会?

Visual c++ 在什么情况下,Windows上的非增量链接会导致抛出异常,而增量链接不会?,visual-c++,msbuild,wxwidgets,Visual C++,Msbuild,Wxwidgets,我已经读到增量链接和非增量链接在功能上应该是等价的,但我最近发现一种情况并非如此,这让我有点困惑。这表明,如果不启用增量链接(/incremental),我的项目的构建无法在运行时显式加载一个包含wxWidgets GUI元素的DLL(从多个DLL中选择) 为了提供一点背景,我的项目制定了以下目标: main.exe core.dll foo.dll bar.dll core.dll包含所有其他项目使用的常规函数。main.exe是一个桌面GUI应用程序(使用wxWidgets),在运行时通

我已经读到增量链接和非增量链接在功能上应该是等价的,但我最近发现一种情况并非如此,这让我有点困惑。这表明,如果不启用增量链接(/incremental),我的项目的构建无法在运行时显式加载一个包含wxWidgets GUI元素的DLL(从多个DLL中选择)

为了提供一点背景,我的项目制定了以下目标:

  • main.exe
  • core.dll
  • foo.dll
  • bar.dll
core.dll包含所有其他项目使用的常规函数。main.exe是一个桌面GUI应用程序(使用wxWidgets),在运行时通过“LoadLibraryW”显式加载foo.dll和bar.dll。“GetProcAddress”然后用于请求DLL中的GUI元素显示,这一切都是通过wxEvent异步完成的。这在很大程度上起到了预期的作用。但是,我发现当main.exe没有增量链接时会出现问题

具体来说,当main.exe未链接到与/INCREMENTAL链接的core.dll,并且当我的项目隐式链接到wxWidgets的发布版本(未以增量链接)时,foo.dll在运行时在分配新的wxPropertyGrid或wxPropertyGridManager时崩溃(已尝试两者)。异常是在“wxmsw30u_propgrid_vc_x64_custom.dll”中引发的,它显然是grid dll的属性。由于wxWidgets的调试版本是增量链接的,不会崩溃,因此我无法获得更多信息

也就是说,当使用wxWidgets的发布DLL版本时,我的项目只有在core.DLL与/INCREMENTAL链接,然后链接到main.exe时才能工作,而不管main.exe是否以增量链接。foo.dll可以与与/INCREMENTAL:NO链接的core.dll链接,只要满足该条件,main.exe仍可以正确打开foo.dll。wxWidgets的调试DLL版本没有问题,它是用/INCREMENTAL构建的。

这概括了我的具体问题。由于实际代码跨越多个文件,我决定将这个问题简化为一个基本问题:增量链接如何使我认为是错误的构建成功运行?我特别想了解这个问题,因为它确实让我感到困惑


编辑:具体来说,我正在Visual Studio 2019上使用wxWidgets-3.0.4,目标是最新的Windows 10 SDK。机器架构为x64。我正在使用CMake构建项目,在使用g++-6.3.0链接并使用dllopen代替LoadLibraryW时,在Linux上没有遇到此类问题。

项目链接中的所有内容都没有/增量吗?或者仅仅是这两个部分?当core.dll以非增量方式链接时,它似乎会特别中断(/INCREMENTAL:NO)。如果core.dll是以增量方式构建的,那么是否以增量方式链接main.exe并不重要(core.dll与main.obj一起链接到main.exe)。foo.dll似乎并不关心是否以增量方式链接。@Igor我在原始帖子中澄清了我的语言,并添加了一些粗体文本(如果有帮助)。项目链接中的所有内容都没有/INCREMENTAL吗?或者仅仅是这两个部分?当core.dll以非增量方式链接时,它似乎会特别中断(/INCREMENTAL:NO)。如果core.dll是以增量方式构建的,那么是否以增量方式链接main.exe并不重要(core.dll与main.obj一起链接到main.exe)。foo.dll似乎并不关心它是否以增量方式链接。@Igor我在原始帖子中澄清了我的语言,并添加了一些粗体文本(如果有帮助的话)。