我正在研究具有多个dll项目的Visual Studio解决方案。特别是一个项目,无论是在Windows 7还是Windows 10上编译,都无法在Windows 7上运行时调用外部函数。在Windows 10上编译并运行代码后,它可以正常工作。没有编译时错误或警告。
当我获得.exe项目或另一个.dll项目中函数的地址时,我拥有了我所期望的信息,但是在此特定项目中调用该信息时,它会丢失。
例如HeapCreate,在正确运行的代码中,它看起来像kernel32.dll!0x773649 但在错误的.dll中,它是0x00024692
对dll外部的任何函数(无论是标准库还是其他项目)的调用都会导致访问冲突或调用某些完全不相关的函数并崩溃。
我已经检查了项目设置,发现它与正确运行的代码之间没有区别。我尝试使用2017和2019 Platform Toolset以及SDK 10.0.15063.0和10.0.17763.0进行编译,唯一的不同之处在于,如果不首先崩溃,就会导致调用不正确的函数。