假设我将Windows API的给定地址硬编码到我的可执行文件中。我是否可以假设此地址将在所有Windows版本(XP,7,Vista,Server07 / 12等)中评估为正确的API?
如果没有,我是否可以在事先得到地址(GetProcAddress或枚举dll序数)的情况下这样做?
我是否必须在我的应用程序中提供带有给定地址的.dll的预先打包版本?
答案 0 :(得分:3)
你所有问题的答案都是否定的。
相对功能入口点地址因Windows的一个版本而异,即使在系统更新时也会有所不同。
DLL本身的基地址因版本而异。最后,DLL不需要加载到他们想要的基址。他们可能会被重新安置。
最后,您无法重新分发系统DLL。这不仅违反了许可证,而且它不起作用,因为系统DLL只与它们随附的Windows版本兼容。
无论您遇到什么问题,硬编码功能入口点都不是解决方案。