How To Check for a Remote Access Service Connection (153793)



The information in this article applies to:

  • Microsoft Visual FoxPro for Windows 3.0
  • Microsoft Visual FoxPro for Windows 3.0b
  • Microsoft Visual FoxPro for Windows 6.0

This article was previously published under Q153793

SUMMARY

This article describes some windows APIs related to a Remote Access Service. The tasks described in this article are available as commands in Microsoft FoxPro version 2.6 for Windows, as well as versions 3.0 and 3.0b. This article describes how to verify the RAS (Remote Access Service) while using the remote view.

MORE INFORMATION

Often, you can anticipate the run-time errors when you work with the remote view due to the bad telephone connection. You can shield from these errors by including the error-handling code included in this article using APIs.

It is possible to check whether a Remote Access Service has been disconnected. This verification can be controlled by using some API calls (RasEnumConnections and RasGetConnectStatus). In this article, the customized API routine was written using Microsoft Visual C++ 4.0 to check the status of RAS connections.

The following sample program illustrates the contents of the .DLL file written in Microsoft Visual C++ 4.0 and shows a way to verify the connection of RAS successfully through the Win32 SDK.

NOTE: This sample program illustrates many Microsoft Visual C++ commands. The use of these commands is beyond the scope of Microsoft FoxPro Product Support. Users with substantial experience using API routines should be able to write the following sample .DLL file. For this sample .DLL file to work, you need a .DEF file to export the rasnt function.

Sample C++ Program (DLL)

   #include <stdio.h>
   #include <windows.h>
   #include <ras.h>

   HANDLE hInst;
   HWND   hDlg;
   HANDLE hHeap;

   BOOL APIENTRY DllMain(HANDLE hInst, DWORD ul_reason_being_called, LPVOID
   lpReserved)
   {
       return 1;
           UNREFERENCED_PARAMETER(hInst);
           UNREFERENCED_PARAMETER(ul_reason_being_called);
           UNREFERENCED_PARAMETER(lpReserved);
   }

   int APIENTRY rasnt(void)
   {
       LPRASCONN     lpRasConn = NULL;
       DWORD   cbBuf = 0;
       DWORD   cConn = 0;
       DWORD   dwRet = 0;
       HRASCONN   hrasconn;
       RASCONNSTATUS rasStatus;
       UINT    ndx;

       // enumerate connections
       cbBuf = sizeof(RASCONN);
       if ( (lpRasConn = ( LPRASCONN ) malloc((UINT)cbBuf)) != NULL)
       {
           lpRasConn->dwSize = sizeof( RASCONN );
           dwRet = RasEnumConnections( lpRasConn, &cbBuf, &cConn );
      for (ndx = 0; ndx < cConn; ndx++)
      {
          // get to HRASCONN
          hrasconn = lpRasConn[ndx].hrasconn;

          // get connection status
          rasStatus.dwSize = sizeof(RASCONNSTATUS);
          dwRet = RasGetConnectStatus( hrasconn, &rasStatus );
          if ( dwRet ) return 0;
          else
          {
         if (rasStatus.rasconnstate == RASCS_Connected) return 1;
         else return 0;
          }
      }
       }

       return 0;
   }
				

Sample DEF File

   LIBRARY   rasnt

   CODE    PRELOAD MOVEABLE DISCARDABLE
   DATA    PRELOAD SINGLE

   EXPORTS
       rasnt      @2

				

Sample Visual FoxPro Program

   DECLARE integer rasnt IN RASNT.DLL
   retval = rasnt()

   IF retval = 1 THEN
      WAIT WINDOW "there is connection"
   ELSE
      WAIT WINDOW "there is no connection"
   ENDIF
				

Sample Program (Notes)

  • To create a .DLL file in Visual C++, please refer to a Help file in Microsoft Visual C++ 4.0.
  • Note that the Rasnt.dll should be in the same directory as your FoxPro project, or should be in the path of the Windows Win32 directory.
In order to compile the above DLL properly, you need to include RASAPI32.LIB.

Modification Type:MajorLast Reviewed:10/15/2003
Keywords:KB153793