Solved

ras.h question

Posted on 2004-08-18
3
317 Views
Last Modified: 2013-11-17
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
Comment
Question by:tamour2004
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 9

Accepted Solution

by:
Cayce earned 250 total points
ID: 11834156
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

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

In our object-oriented world the class is a minimal unit, a brick for constructing our applications. It is an abstraction and we know well how to use it. In well-designed software we are not usually interested in knowing how objects look in memory. …
Here is a helpful source code for C++ Builder programmers that allows you to manage and manipulate HTML content from C++ code, while also handling HTML events like onclick, onmouseover, ... Some objects defined and used in this source include: …
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…
The viewer will learn how to use and create keystrokes in Netbeans IDE 8.0 for Windows.

739 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question