Newsgroup: it.comp.lang.visual-basic
Titolo: RAS-API e CallBack

Sto cercando di scrivere una classe per la gestione della connessione
tramite le RAS-API, facendo riferimento al prezioso lavoro di Moreno
Sirri presente oltre che sul suo sito anche sul numero di ottobre di
'IoProgrammo' ma mi sono bloccato di fronte a due maledetti intoppi.
I problemi che ho sono di due tipi:
1. Volendo eseguire una chiamata a RASDial in modo asincrono per poter
avere un fedd-back dello stato della connessione senza bloccare il resto
dell'applicazione, o senza dover eseguire il subclassamento della
finestra
in cui utilizzo la classe, ho provato ad utilizzare la funzione di
CallBack ma con
risultati disastrosi (il blocco puntuale del sistema). La cosa che mi
rende nervoso (usando un eufemismo!) e' che mi sembra di aver rispettato
tutti i rigidi canoni imposti dal CallBack. Allego qui' di seguito
la dichiarazione della funzione RasDial, la procedura che richiama la
RASDial
e la procedura di CallBack (tutte dichiarate in un modulo standard .bas)
Public Declare Function RasDial Lib "RasApi32.DLL" Alias "RasDialA"
(lpRasDialExtensions As Any, ByVal lpszPhonebook As String,
lprasdialparams As Any, ByVal dwNotifierType As Long, lpvNotifier As
Long, lphRasConn As Long) As Long
Sub eseguiCallBack()
    Dim RasDialP As RASDIALPARAMS, hRasConn As Long
    With RasDialP
        .dwSize = 1052
        .szPhoneNumber = vbNullChar
        .szCallbackNumber = vbNullChar
        .szDomain = vbNullChar
        .szEntryName = "nomeConnessione" & vbNullChar
        .szUserName = "Login" & vbNullChar
        .szPassword = "Password" & vbNullChar
    End With
    lngHandleConnection = RasDial(ByVal 0&, vbNullString, RasDialP, 1&,
AddressOf RasDialFunc1, hRasConn)
    If lngHandleConnection Then RasHangUp ByVal lngHandleConnection
End Sub
Sub RasDialFunc1(ByVal hRasConn As Long, ByVal unMsg As Long, ByVal
rasConnectionState As Long, ByVal dwError As Long, ByVal dwExtendedError
As Long)
    Debug.Print hRasConn, Hex$(rasConnectionState), dwError
    If rasConnectionState = RASCS_Connected Then
      Debug.Print "connected"
    ElseIf rasConnectionState = RASCS_Disconnected Then
      Debug.Print "disconnected"
    End If
    If dwError <> 0 Then Debug.Print Str(dwError)
End Sub
...ho controllato e ricontrollato diecimila volta sia sul MSDN che su
altre
fonti in rete!
2. Il secondo problema e' relativo alla chiamata a RASGetErrorString la
quale
mi restituisce sempre un errore ERROR_INVALID_PARAMETER (87) anche nel
caso
del piu' banale errore che gli passo cioe' il 630 (errore hardware
dovuto al
modem spento). Anche in questo caso allego la riga di dichiarazione
della
funzione e la procedura (scritta da Moreno Sirri):
Public Declare Function RasGetErrorString Lib "RasApi32.DLL" Alias
"RasGetErrorStringA" (ByVal uErrorValue As Long, ByVal lpszErrorString
As String, ByVal cBufSize As Long) As Long
Public Function RASErrorString(RASErrorNumber As Long) As String
    Dim lngRet As Long
    Dim strRASErrorString As String
    strRASErrorString = Space$(256)
    Select Case RASErrorNumber
        Case Is >= 600
            lngRet = RasGetErrorString(RASErrorNumber,
strRASErrorString, 256&)
            If lngRet Then
                RASErrorString = "Chiamata a RasGetErrorString fallita.
Errore nel ricavare la stringa di errore!!!"
            Else
                RASErrorString = strRASErrorString
            End If
        Case NOT_SUPPORTED
            RASErrorString = "Funzione non supportata in questa verisone
di Windows"
        Case Else
            RASErrorString = "Errore inaspettato"
    End Select
End Function
...l'unica cosa che mi viene in mente a questo punto e' che la
"RasApi32.DLL"
(versione 4.10.2222) presente sul mio sistema (Win98) abbia dei
problemini!
Qualcuno puo' darmi una indicazione? grazie comunque per la vostra
attenzione
e buon lavoro a tutti.
Luciano


Non credo. A parte W2000  e WMe (che non ho testato) mi ha funzionato tutto
sia su W9x che NT.
Ciao
Aldo

 Hal1961 ha scritto:
