Closed chirsz-ever closed 1 year ago
请问这个PR它解决了什么问题? 首先,2000有这个函数。其次微软SDK lib中SHSetFolderPathW也是序数导入。
直接链接了也不会导致问题。
如果仅仅为了在使用SDK5情况下会链接失败问题,而增加写代码,那么我不接受。
假设要兼容2000,其实严格来说只有这几个InterlockedPushEntrySList、GetModuleHandleExW,是WinXP有而2000没有的。
使用者完全可以升级SDK解决,毕竟现在SDK5几乎没人用,升级SDK也没有太大成本。
解决的问题是让 YY_Thunks_for_Win2K.obj
和 Platform SDK 5.2 一起链接时不会报错。链接时的报错信息是 YY_Thunks_for_Win2K.obj
里有未解决的符号,所以容易被认为是 YY-Thunks 的问题……
已经只局限在 Win2K 的 Thunks 里了,因为如果有人试图用 SDK 5.2 链接报错,生成目标是 WinXP 平台,可以建议他更新到 SDK 7.1;但如果生成目标是 Win2K 平台,也不能说坚持使用 SDK 5.2 是绝对错误的。
另外本 PR 还使得用 __DEFINE_THUNK_WN
可以指定通过序数而非导出名称来查找函数,虽然我检查了其它的 thunk,没有必须使用序数导入的,但以后可能有这种需求。
如果你仍然觉得无论什么情况,都应该让使用者升级 SDK 版本,那就关掉本 PR 和 #53 吧,我会自己生成导入库的。
嗯,__DEFINE_THUNK_WN通过序数导出能力确实目前没有。我会记录,未来有实际了再从这个PR中提取代码(我会保持代码记录作者是你)。
对于兼容2000系统使用SDK5.*问题,其实只有这几个API,InterlockedPushEntrySList、GetModuleHandleExW是真心意义上的无法解释的情况。这种场景是罕见的,遇到这个问题时直接升级SDK版本就好了。
这样吧,我更新一下rename,内部明确指出SDK至少需要6.0或者更高版本(也就是VS2008默认带的SDK版本)。
低版本编译器使用高版本的SDK这并没有什么问题,你可以尝试直接升级到 SDK10,而不必局限于7.1。
感谢你的支持,如果提供真真缺失的API我会很开心。
另外未来如果你需要编译兼容XP的rust程序,我们任然有合作的机会。
没有找到直接在源代码中指定按 ordinal 加载动态库函数的方法。