digitalmars.D.learn - Phobos - system.d
- Tommy (14/14) Oct 10 2005 This is hardcoded in system.d:
- Mathias (76/90) Oct 12 2005 Yep, I've played with it, and I can't get the D version to work as well
- Mike Parker (5/12) Oct 12 2005 std.c.windows.windows is missing quite a chunk of the Win32 API
- Mathias (4/8) Oct 13 2005 Do you mean with copy+paste? Well, that might work. (Haven't tested it
- Sean Kelly (4/11) Oct 13 2005 The MSDN documentation is fair game I think. And it has callign convent...
This is hardcoded in system.d:
OS os = OS.WindowsNT;
Wouldn't run-time detection be more useful? Considering these definitions:
enum OS
{
Windows95 = 1,
Windows98,
WindowsNT,
Windows2000,
RedHatLinux,
}
Trying to do this myself, my program failed to compile using
OSVERSIONINFO and GetVersionEx. Any Windows library I can link in?
Tommy
Oct 10 2005
Yep, I've played with it, and I can't get the D version to work as well
(DMD complains about OSVERSIONINFO and GetVersionEx undefined. The C
version below, however, seems to work well (compiles and runs fine with
DMC 8.45).
Mathias
/*
Detect Windows version at run-time.
Placed into the public domain. ;-)
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
enum OS
/* added Win32s, Windows ME, WindowsXP, Windows2003 (Server Edition),
WindowsVista (Longhorn) */
{
Win32s = 1,
Windows95,
Windows98,
WindowsME,
WindowsNT,
Windows2000,
WindowsXP,
Windows2003,
WindowsVista,
RedHatLinux,
} os;
unsigned int os_major, os_minor;
int main(void)
{
OSVERSIONINFO osversioninfo;
osversioninfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(GetVersionEx(&osversioninfo))
{
os_major = osversioninfo.dwMajorVersion;
os_minor = osversioninfo.dwMinorVersion;
if(osversioninfo.dwPlatformId == VER_PLATFORM_WIN32s)
os = Win32s;
else if(osversioninfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
if(osversioninfo.dwMajorVersion == 4)
{
if(osversioninfo.dwMinorVersion == 0)
os = Windows95;
else if(osversioninfo.dwMinorVersion == 10)
os = Windows98;
else if(osversioninfo.dwMinorVersion == 90)
os = WindowsME;
}
}
else if(osversioninfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
if(osversioninfo.dwMajorVersion == 4)
os = WindowsNT;
if(osversioninfo.dwMajorVersion == 5)
{
if(osversioninfo.dwMinorVersion == 0)
os = Windows2000;
else if(osversioninfo.dwMinorVersion == 1)
os = WindowsXP;
else if(osversioninfo.dwMinorVersion == 2)
os = Windows2003;
}
if(osversioninfo.dwMajorVersion == 6)
os = WindowsVista;
}
}
else /* assume Windows NT if GetVersionEx call fails */
{
os = WindowsNT;
os_major = 4;
os_minor = 0;
}
return EXIT_SUCCESS;
}
In article <diek2e$plb$1 digitaldaemon.com>, Tommy says...
This is hardcoded in system.d:
OS os = OS.WindowsNT;
Wouldn't run-time detection be more useful? Considering these definitions:
enum OS
{
Windows95 = 1,
Windows98,
WindowsNT,
Windows2000,
RedHatLinux,
}
Trying to do this myself, my program failed to compile using
OSVERSIONINFO and GetVersionEx. Any Windows library I can link in?
Tommy
Oct 12 2005
Mathias wrote:Yep, I've played with it, and I can't get the D version to work as well (DMD complains about OSVERSIONINFO and GetVersionEx undefined. The C version below, however, seems to work well (compiles and runs fine with DMC 8.45).std.c.windows.windows is missing quite a chunk of the Win32 API definitions. Whenever something from Windows is undefined, all you need do is look in the Windows headers for your C compiler and use that to define them in your D module. Or am I missing something?Trying to do this myself, my program failed to compile using OSVERSIONINFO and GetVersionEx. Any Windows library I can link in?
Oct 12 2005
In article <dijtkc$2ddh$1 digitaldaemon.com>, Mike Parker says...std.c.windows.windows is missing quite a chunk of the Win32 API definitions. Whenever something from Windows is undefined, all you need do is look in the Windows headers for your C compiler and use that to define them in your D module. Or am I missing something?Do you mean with copy+paste? Well, that might work. (Haven't tested it yet, though.) Can we expect any legal problems from Microsoft? ;-) Mathias
Oct 13 2005
In article <dimfvr$2oks$1 digitaldaemon.com>, Mathias says...In article <dijtkc$2ddh$1 digitaldaemon.com>, Mike Parker says...The MSDN documentation is fair game I think. And it has callign conventions in it. Not as fast as copy+paste, but it's something. Seanstd.c.windows.windows is missing quite a chunk of the Win32 API definitions. Whenever something from Windows is undefined, all you need do is look in the Windows headers for your C compiler and use that to define them in your D module. Or am I missing something?Do you mean with copy+paste? Well, that might work. (Haven't tested it yet, though.) Can we expect any legal problems from Microsoft? ;-)
Oct 13 2005








Sean Kelly <sean f4.ca>