Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 320
  • Last Modified:

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
0
tamour2004
Asked:
tamour2004
1 Solution
 
CayceCommented:
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

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now