为何编译时出现 未找到^HRASConn,,我该怎么办?
Unit  ras_api;Interface
uses windows;Const
  UNLEN = 256;
  PWLEN = 256;
  DNLEN = 15;
  RAS_MaxEntryName      =  256;
  RAS_MaxDeviceName     =  128;
  RAS_MaxDeviceType     =  16;  RAS_MaxPhoneNumber    = 128;
  RAS_MaxCallbackNumber =  RAS_MaxPhoneNumber;
  PHRASConn = ^HRASConn;
  HRASConn = DWORD;const
  RASDialEvent = 'RASDialEvent';
  WM_RASDialEvent = $0CCCD;
  { Enumerates intermediate states to a Connection.  (See RasDial) }
  RASCS_Paused = $1000;
  RASCS_Done   = $2000;  RASBase = 600;
  Success = 0;Const
  RASCS_OpenPort = 0;
  RASCS_PortOpened = 1;
  RASCS_ConnectDevice = 2;
  RASCS_DeviceConnected = 3;
  RASCS_AllDevicesConnected = 4;
  RASCS_Authenticate = 5;
  RASCS_AuthNotify = 6;
  RASCS_AuthRetry = 7;
  RASCS_AuthCallback = 8;
  RASCS_AuthChangePassword = 9;
  RASCS_AuthProject = 10;
  RASCS_AuthLinkSpeed = 11;
  RASCS_AuthAck = 12;
  RASCS_ReAuthenticate = 13;
  RASCS_Authenticated = 14;
  RASCS_PrepareForCallback = 15;
  RASCS_WaitForModemReset = 16;
  RASCS_WaitForCallback = 17;  RASCS_Interactive         = RASCS_Paused;
  RASCS_RetryAuthentication = RASCS_Paused + 1;
  RASCS_CallbackSetByCaller = RASCS_Paused + 2;
  RASCS_PasswordExpired     = RASCS_Paused + 3;  RASCS_Connected    = RASCS_Done;
  RASCS_DisConnected = RASCS_Done + 1;Type
{ Identifies an active RAS Connection.  (See RasConnectEnum) }
  PRASConn = ^TRASConn;
  TRASConn = record
     dwSize: DWORD;  
     rasConn: HRASConn;
     szEntryName: Array[0..RAS_MaxEntryName] Of Char;
     szDeviceType : Array[0..RAS_MaxDeviceType] Of Char;
     szDeviceName : Array [0..RAS_MaxDeviceName] of char;
  end;  PRASConnStatus = ^TRASConnStatus;
  TRASConnStatus = Record
    dwSize: LongInt;
    rasConnstate: Word;
    dwError: LongInt;
    szDeviceType: Array[0..RAS_MaxDeviceType] Of Char;
    szDeviceName: Array[0..RAS_MaxDeviceName] Of Char;
  End;  PRASDIALEXTENSIONS= ^TRASDIALEXTENSIONS;
  TRASDIALEXTENSIONS= Record
    dwSize: DWORD;
    dwfOptions: DWORD;
    hwndParent: HWnd;
    reserved: DWORD;
   end;  PRASDialParams = ^TRASDialParams;
  TRASDialParams = Record
    dwSize: DWORD;  
    szEntryName: Array[0..RAS_MaxEntryName] Of Char;
    szPhoneNumber: Array[0..RAS_MaxPhoneNumber] Of Char;
    szCallbackNumber: Array[0..RAS_MaxCallbackNumber] Of Char;
    szUserName: Array[0..UNLEN] Of Char;
    szPassword: Array[0..PWLEN] Of Char;
    szDomain: Array[0..DNLEN] Of Char;
  end;  PRASEntryName = ^TRASEntryName;
  TRASEntryName = Record
    dwSize: LongInt;
    szEntryName: Array[0..RAS_MaxEntryName] Of Char;
//    Reserved: Byte;
  End;
Function RasDial(
    lpRasDialExtensions : PRASDIALEXTENSIONS ; // pointer to function extensions data
    lpszPhonebook: PChar; // pointer to full path and filename of phonebook file
    lpRasDialParams : PRASDIALPARAMS; // pointer to calling parameters data
    dwNotifierType : DWORD; // specifies type of RasDial event handler
    lpvNotifier: DWORD; // specifies a handler for RasDial events
    var rasConn: HRASConn  // pointer to variable to receive connection handle
   ): DWORD; stdcall;function RasEnumConnections(RASConn: PrasConn;    { buffer to receive Connections data }
                            var BufSize: DWord;    { size in bytes of buffer }
                            var Connections: DWord { number of Connections written to buffer }
                            ): LongInt; stdcall;Function RasEnumEntries (
    reserved: PChar; // reserved, must be NULL
    lpszPhonebook: PChar  ; // pointer to full path and filename of phonebook file
    lprasentryname: PRASENTRYNAME ; // buffer to receive phonebook entries
    var lpcb :  DWORD;// size in bytes of buffer
    var lpcEntries : DWORD// number of entries written to buffer
   ) : DWORD; stdcall;function RasGetConnectStatus(RASConn: hrasConn; { handle to Remote Access Connection of interest }
                             RASConnStatus: PRASConnStatus { buffer to receive status data }
                             ): LongInt; stdcall;function RasGetErrorString(ErrorCode: DWord; { error code to get string for }
                           szErrorString: PChar; { buffer to hold error string }
                           BufSize: DWord { sizeof buffer }
                           ): LongInt; stdcall;function RasHangUp(RASConn: hrasConn { handle to the Remote Access Connection to hang up }
                   ): LongInt; stdcall;function RasGetEntryDialParams(
    lpszPhonebook:PChar; // pointer to the full path and filename of the phonebook file
    VAR lprasdialparams:TRASDIALPARAMS; // pointer to a structure that receives the connection parameters
    VAR lpfPassword : BOOL // indicates whether the user's password was retrieved
   ): DWORD; stdcall;implementationconst
  RAS_DLL = 'RASAPI32.DLL';function RasDial; external RAS_DLL name 'RasDialA';
function RasEnumConnections; external RAS_DLL name 'RasEnumConnectionsA';
function RasEnumEntries; external RAS_DLL name 'RasEnumEntriesA';
function RasGetConnectStatus; external RAS_DLL name 'RasGetConnectStatusA';
function RasGetErrorString; external RAS_DLL name 'RasGetErrorStringA';
function RasHangUp; external RAS_DLL name 'RasHangUpA';
function RasGetEntryDialParams; external RAS_DLL name 'RasGetEntryDialParamsA';
end.//win98 passed
function Mydialup(const pppuser,ppppasswd,telno:string) :boolean;
var
  dialpara:TRASDialParams;
begin
    try
      fillchar(dialpara,sizeof(dialpara),#0);
      with dialpara do
      begin
         dwSize:=sizeof(TRASDialParams);
         strcopy(szPhoneNumber,pchar(telno));
         szCallbackNumber:='';
         strcopy(szUserName,pchar(pppuser));
         strcopy(szPassword,pchar(ppppasswd));
         szDomain:='';
         rashandle:=0;
         result:=RasDial(nil,'',@dialpara,$FFFFFFFF,0,rashandle)=0;
      end;
    except
      result:=false;
    end;
end;