The information in this article applies to:
SUMMARYThe LPSTR returned from MAKEINTATOM() cannot be treated as a general-purpose string pointer. Instead, either use it with the Atom family or convert it into a valid string before passing it off as one. MORE INFORMATION
The MAKEINTATOM() macro is documented on Page 370 of the "Microsoft
Windows Software Development Kit Programmer's Reference" versions 2.x
as returning a value of type LPSTR. This is correct, but misleading.
The LPSTR value returned is a "fabricated" LPSTR and cannot be
considered a general-purpose string pointer. Consider the definition
of the MAKEINTATOM macro:
This tells the compiler to "take the integer value 'i', think of it as a WORD, zero-extend this into a DWORD, then think of this as a LPSTR." Thus, MAKEINTATOM(1Ah) returns 001Ah. This obviously is not the same as "1A", which would be ASCII(1)+ASCII(A)+0. The reason this psuedo-LPSTR works with AddAtom(), for example, is that AddAtom() looks to see if the HIWORD of the LPSTR parameter is 0 (zero). If so, AddAtom() knows that the LOWORD contains an actual integer value and it simply grabs that. The following code samples show how problems can occur with these psuedo-LPSTRs returned from MAKEINTATOM. Incorrect
The above code fragment will create and return a valid atom, but the message box will display an erroneous value. Correct
In the above example, we converted the integer value contained in the
LOWORD of szAtom into a character string, then used this new character
string in the MessageBox() call.
Although these code fragments illustrate the limitations of a MAKEINTATOM LPSTR, they are not very realistic because you really should use GetAtomName() to get the character string of an atom. If you have not yet created an atom out of an integer value, you could just format the integer into character string directly, as follows:
Additional query words: 3.00 3.10 3.50 4.00 win16sdk
Keywords : |
Last Reviewed: March 2, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |