Actually, this is a thing, that i very much like on the PB language.
You don't have to care about, what it is you store somewhere, as long
as it fits where you put it. This means, you can put everything in a LONG
variable, no matter, if it is a handle, a pointer to a string, or just a number
you need to count something in your program.
Have a look at C for example. You have hell of a lot of different types
there, each for a different purpose, but most of them are just 32bit
variables, nothing else. And I really hate all those type conversions you
have to do there.
That's the good thing about PB. All that is 32bit variable, is just a long.
You can still use a pointer to store your Window handle, if you like, but
if not, you can just copy it to a LONG, and live happily ever after
To come back to your original question:
What is a pointer anyway?
Look at what the ASM output of PB shows us:
*Pointer is represented by "p_Pointer", and Variable.l is replaces by
"v_Variable", both are of dword type. So where's the difference?
Actually, ASM doesn't care about what's inside, just like PB does.
It is just the compiler, who complains on other languages. If the language
has strict rules in that matter, like C has, then the compiler will stop and
say: hey, this isn't a HANDLE, it's a HWND, make a conversion! (well,
he'd say something similar at least

)
I'm really glad the PB compiler doesn't do this.
I personally prefer using the Pointer symbol '*' only in places, where it
makes sense to me. Which is, at places, where you actually have a Pointer,
and also try to read, what is stored at where it points to. (which is what you never do with a Window handle for example). For example, you have
a pointer to a Structure of data. This is where it makes sense to me.
But this is up to the individual programmer. And this is my whole point:
If you like to use *hWnd, because it reminds you of, that this is a handle
or something, that's fine, that's the strong point of PB
Well, so much about that...
Timo