Why does this work?
Denis Koroskin
2korden at gmail.com
Sat Jan 24 12:38:04 PST 2009
Mike L. Wrote:
> I saved and compiled the code given as getenv.d on the page http://www.digitalmars.com/d/archives/digitalmars/D/learn/623.html but I'm not entirely sure why it works.
>
> The reasons that I don't understand it are:
> 1. GetEnvironmentStringsA() and the other functions aren't mentioned in std/c/windows/windows.d .
It is not defined int std.c.windows.windows, that's why it is defined in the code itself:
# // function retrieves the environment variables for the current process.
# extern( Windows ) LPVOID GetEnvironmentStringsA();
#
> and I can compile it with a simple "dmd getenv.d" without passing any other object files or libraries. If it's not in windows.d, why is windows.d even imported?
>
std.c.windows.windows is imported so that compiler knows about LPSTR, LPVOID, BOOL etc.
> 2. MSDN says that GetEnvironmentStringsA() returns LPTCH but getenv.d's version returns LPVOID.
That's true, you should update function's return type and remove unneccessary casts:
extern( Windows ) LPTSTR GetEnvironmentStringsA();
...
for (lpszVariable = lpvEnv; *lpszVariable; lpszVariable++)
More information about the Digitalmars-d-learn
mailing list