In addition to what already told by Richard about the point 2: values returned by GetClassInfoEx and GetClassLong.
These functions can return indifferently a real address or an handle to the window procedure (the reason is someway related to memory mapping of the procedure and its process). The translation between handle and address is made by the function
CallWindowProc()[
^], and this is the reason why you should always use this function instead of calling directly the address returned.