我今天发现GetWindowLong
(and GetWindowLongPtr
) 有 'ANSI' (A) 和 'Unicode' (W) 风格,即使它们没有TSTR
参数。上的MSDN 页面GetWindowLong
仅表明存在这些变体,但没有提及原因。
我可以想象它必须与CreateWindowEx
(也有 A/W 风格)或的编码相匹配RegisterClass
,但由于许多原因,我认为这没有意义。显然,这很重要,因为有人报告说 Unicode 版本在 XP 上可能会失败(即使 XP 是 NT 并且据我所知,所有 Unicode 都在引擎盖下)。我还尝试反汇编 32 位版本USER32.DLL
(其中包含 的两种风格GetWindowLong
),并且基于一些明显的编码差异做了额外的工作*。
我应该选择哪个功能?
GetWindowLong
*除了传递给其他函数的布尔值外,它们的风格是相同的。这个布尔值与内存结构中的标志位进行比较,我懒得使用静态代码分析来追踪。