Denis Koroskin Wrote: > 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++)
Thanks for your response. Could you tell me what the compiler is linking to that contains GetEnvironmentStringsA() (and others) and how the compiler knows to do this?