What does = "GetEnvironmentVariableA@12" mean?

BlitzMax Forums/BlitzMax Programming/What does = "GetEnvironmentVariableA@12" mean?

Grey Alien(Posted 2007) [#1]
Hiya, basically you see this:

?win32
Extern "win32"
	Function GetEnvironmentVariable(lpName$z, lpBuffer:Byte Ptr, nSize) = "GetEnvironmentVariableA@12"

End Extern
?


Why does it need that extra bit on the end after the function is declared? What does it do? Thanks.


Dreamora(Posted 2007) [#2]
This is needed for visual studio compiled dlls.
Thats a name sheme thing of win32 librarys.

What it actually means is that the function takes 12bytes of input. byte ptr, byte ptr, int in this case


Grey Alien(Posted 2007) [#3]
Hmm OK thanks, so I've got a lot of Win32 externs I've collected and some use that ="blah@N" thing after the function declaration but many don't. Do some need it and others not or maybe none really need it?


Azathoth(Posted 2007) [#4]
Its a name-decoration for the stdcall calling convention, when making the DLL some compilers allow you to remove it or redefine the name without it.

Edit: Most times Extern "Win32" will get the name right anyway, you really only need the "GetEnvironmentVariableA@12" if you want to name the function something different.


Kev(Posted 2007) [#5]
some also contain 2 sets of functions one for (Unicode = GetEnvironmentVariableW@12) and one for (ANSI = GetEnvironmentVariableA@12)


Grey Alien(Posted 2007) [#6]
Aha so W means Wide and A means Ansi, got it.