by Michael S. Kaplan, published on 2006/07/17 17:01 -04:00, original URI: http://blogs.msdn.com/b/michkap/archive/2006/07/17/668787.aspx
When you think about the 'A' and 'W' decorated versions of functions, in most cases the 'A' version is a simple wrapper that converts the strings, calls the 'W' version, and then when needed converts the string back.
However, there are exceptions to this general principle....
The other day, when I posted How long is that non-Unicode string?, Mihai commented at one point (in relation to potentially using CharNextExA in the solution):
"CharNextExA would work here"
Unless you run it on Win XP, where is broken :-)
He was referring of course to what was posted way back in January of last year in We broke CharNext/CharPrev (or, bugs found through blogging?). The bug that made me decide I enjoyed having a technical blog....
And the issue here seemed worthy of a wee little post of its own -- the post you are reading right now, in fact!
Now if you look at CharNext and CharPrev, they do not have separate topics for CharNextW/CharNextA and CharPrevW/CharPrevA. Because for both functions, what they do from a text description standpoint is about the same.
But if you look at what each function has to do:
(Of course there is the fact that the Vietamese code page also has some combining characters on it as I mentioned previously, but CharNext and CharPrev have never handled this case properly. I suppose one could call this a bug, though I am unaware of plans to fix this.)
In any case, since there is no real overlap of the functionality needed in the 'A' and 'W' versions, the functions are kept entirely separate. There is no "convert and call" logic, and it would not be useful if there were.
Funny how the desctiptions are the same though, huh?
You can think of it as the difference between riding a bicycle and riding a unicycle -- similar principles, but a very different set of skills.
The bonus trivia question -- do you know why the "convert and call" logic would actually be hard to do here if it had been a good idea?
And the bonus hard trivia question -- can you think of a function where it is a good idea even with that difficulty?
This post brought to you by À (U+00c0, a.k.a. LATIN CAPITAL LETTER A WITH GRAVE)
# Sebastian Redl on 18 Jul 2006 5:12 AM:
# Michael S. Kaplan on 18 Jul 2006 5:24 AM: