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++)