我今天发现 GetWindowLong (和 GetWindowLongPtr )具有“ANSI”(A)和“Unicode”(W)风格,即使它们没有 TSTR 参数。 MSDN page on GetWindowLong 仅表示存在这些变体,但没有提及原因。

我可以想象它必须匹配 CreateWindowEx (也有 A/W 风格)或 RegisterClass 的编码,但出于多种原因,我认为这没有意义。显然,这很重要,因为 someone reported that the Unicode version may fail on XP (即使 XP 是 NT,据我所知,引擎盖下的所有 Unicode)。我还尝试反汇编 USER32.DLL 的 32 位版本(其中包含 GetWindowLong 的两种风格),并且根据一些明显的编码差异做了额外的工作*。

我应该选择哪个功能?

* GetWindowLong 的风格是相同的,除了它们传递给其他函数的 bool 值。这个 bool 值与内存结构中的标志位进行比较,我无法使用静态代码分析来追踪。

最佳答案

我相信原因在 Raymond Chen 的文章 What are these strange values returned from GWLP_WNDPROC? 中有解释

关于winapi - 为什么 GetWindowLong 有 ANSI 和 Unicode 变体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9036654/

10-11 18:11