ras.h question

i am making a dialer i want it to run on all windows platforms 98, 2000, XP
this is part of code

#pragma warn -dup
#define WINVER 0x400
#include <ras.h>

    char newentryname[100];
    DWORD entrysize, configsize, error;
    BYTE configbuffer[512];
    bool password;
    char buffer[512];

    configsize = sizeof(configbuffer);
    RASENTRY entry;

    String name = (String)entryname;
    strcpy(newentryname, name.c_str());

    memset(&entry, 0, sizeof(RASENTRY));
    entrysize = sizeof(RASENTRY);
    entry.dwSize = sizeof(RASENTRY);

        int version1=GetOSVersion();
        if (version1==1)
        {
                entry.dwfOptions=8984;
        }
        else if(version1==2)
        {
                //entry.dwfOptions=1024197400;
                entry.dwfOptions=RASEO_SwCompression|RASEO_IpHeaderCompression|RASEO_RemoteDefaultGateway|RASEO_ModemLights|0x01000000|0x04000000;
                  //entry.dwType=RASET_Phone;
        }
        else if(version1==3)
        {
                entry.dwfOptions=RASEO_SwCompression|RASEO_IpHeaderCompression|RASEO_RemoteDefaultGateway|RASEO_ModemLights;
        }
        else {ShowMessage("Can not detect OS Version");}
       
                String strDeviceType=GetDeviceType();
                String strDeviceName=GetDeviceName();
                   strcpy(entry.szDeviceType, strDeviceType.c_str());
            strcpy(entry.szDeviceName, strDeviceName.c_str());
              strcpy(entry.szLocalPhoneNumber, "07777007");
              strcpy(entry.szDeviceType,RASDT_Modem);
              entry.dwFramingProtocol=RASFP_Ppp;
                entry.dwfNetProtocols=RASNP_Ip;

        error = RasSetEntryProperties (NULL, newentryname,&entry, entrysize, configbuffer, configsize);
    if(error)
    {
        RasGetErrorString(error, buffer, sizeof(buffer));
        ShowMessage(buffer);
        return false;
    }
    return true;

but this only work on win 98 when i try to put some other properties for win 2000 the compiler stops with error message it does not understand these properties unless i change
#define WINVER 0x400
with
#define WINVER 0x500

but i want one program to run on all platforms
and when i ignore this line and dont pass it an error message is generated saying an incorrect structure size , ithink it is the RASENTRY structure
what is the solution for that problem
thx
tamour2004Asked:
Who is Participating?
 
CayceConnect With a Mentor Commented:
You need to work with WINVER 0x400 for it to work on all versions. Or you can create a different DLL for each windows version and compile it with different WINVER values and options.

Something like this (pseudo code):

  ver = GetWindowsVersion();
  switch(ver)
  {
  case Win95: hLib = LoadLibrary("dialer95.dll"); break;
  case Win98: hLib = LoadLibrary("dialer98.dll"); break;
  case Win2k: hLib = LoadLibrary("dialer2k.dll"); break;
  case WinXP: hLib = LoadLibrary("dialerxp.dll"); break;
  }
  // Now load the address procs from hLib and call the procedures
  // each dll would be compiled with different options (WINVER for instance)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.