Newsgroup: it.comp.lang.visual-basic
Titolo: Funzione RasEnumConnections

Ciao a tutti!
Qualcuno č cosě gentile da postarmi un esempio di utilizzo della funzione
RasEnumConnections? Cercando di modificare l'esempio RasApi di Microsoft, la
funzione mi dice sempre che ha trovato 0 connessioni; inoltre, chiudendo la
sessione di Windows, mi appare un errore di protezione generale in MsgSrv32.
Preciso che, utilizzando la libreria RAS_AUTO.DLL fornita da Microsoft, non
ho nessun problema, ma io vorrei evitarla.
Grazie a tutti coloro che vorranno rispondermi.
Marco Minerva
http://www.geocities.com/SiliconValley/Foothills/7260/
http://www.armaditaggia.com/marco

...


>Qualcuno è così gentile da postarmi un esempio di utilizzo della funzione


ho tentato di utilizzare la funzione su citata, ma mai con successo.
Guardati l'esempio sul sito comune. Dovresti trovare quallo che ti serve.
Ciao, Rick
Buon Natale.

Sul mio server non esiste l'NG che tu indichi, comunque temendo ciň ho
mandato anche il codice nel messaggio, scusate, non mi intrometterň piů.


Non e' questione di intrommissione! Il tuo intervento e' PREZIOSO!
E' che se posti esempi allegati alla mail su questo NG, un robot
automaticamente elimina il messaggio o l'allegato.
Per andare sul sicuro, e per postare binari, usa appunto
it.binari.visual-basic .
Se non l'hai, fai un refresh, e' appena nato e quindi non l'hai nella tua
attuale lista di NGs.
Ciao
By -MES-   Maronese Ettore
http://ilmes.freeweb.org
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://members.xoom.com/it_lang_vb

Caro Ettore,  ho verificato quanto da te asserito ed ho trovato il novo NG,
grazie. Non penso sia opportuno mandare il progettino che ho fatto nel nuovo
NG. COmunque volevo suggerire una cosa, il discorso del manifesto io non
l'avevo mai sentito. Forse è opportuno che sia postato,come ho letto in
it.binari.visu...... ogni poco tempo perchè penso che non tutti sappiano che
esista (mi riferisco a questo NG), forse ciò potrebbe risolvere un pò di
problemi e discussioni.
Anche se certamente la buona educazione dovrebbe prevalere prima di entrare
a  far parte di iniziative cosi interessanti.?!?
Cordialmente Leonardo Orazi.

NG.
Il tuo progetto da un errore se hai più di una connessione... ^_^;;
Ciao

mandato anche il codice nel messaggio, scusate, non mi intrometterò più.
  it.binari.visual-basic e' stato linkato anche dal newsserver di TIN,
ma forse il tuo autlucche non e' configurato per informarti
automaticamente dei nuovi newsgroup oppure non ti sei accorto che
qualche giorno fa c'era anche quello nella lista...
  Ciao :-)
  Massimo
  Nell'indirizzo, inserire una "h" tra la "t" e la "u"
  In the address, insert an "h" between the "t" and the "u"

lpcb, NumConnessioni)
Subscript out of range in Connessioni(0)
Perché hai impostato la lungh a 264?
Funziona solo se la imposto a 26 o 28, ma mi visualizza solo il nome di una connessione (la prima), le altre hanno come
nome una stringa di lunghezza zero.
Come mai?
Inoltre, dove si può trovare una documentazione sulle RAS API? (dal momento che anche sul WIN32 Guide c'é poco, e
soprattutto mancano alcune costanti (come quelle degli errori)
Grazie, ciao e Buone Feste,
Moreno.
#sirri#@
tin.it
(togliete "#" dall'indirizzo)


l...@itcnet.it

Ecco la soluzione...
Private Const RAS_MaxDeviceType = 16
Private Const RAS95_MaxDeviceName = 128
Private Const RAS95_MaxEntryName = 256
Private Type RASCONN95
    dwSize As Long
    hRasConn As Long
    szEntryName(RAS95_MaxEntryName) As Byte
    szDeviceType(RAS_MaxDeviceType) As Byte
    szDeviceName(RAS95_MaxDeviceName) As Byte
End Type
Private Type RASENTRYNAME95
    dwSize As Long
    szEntryName(RAS95_MaxEntryName) As Byte
End Type
Private Declare Function RasEnumConnections Lib "RasApi32.DLL" Alias "RasEnumConnectionsA" (lprasconn As Any, lpcb As
Long, lpcConnections As Long) As Long
Private Declare Function RasEnumEntries Lib "RasApi32.DLL" Alias "RasEnumEntriesA" (ByVal reserved As String, ByVal
lpszPhonebook As String, lprasentryname As Any, lpcb As Long, lpcEntries As Long) As Long
Private Sub Form_Load()
 
    Dim s As Long, l As Long, ln As Long, a$
    ReDim R(255) As RASENTRYNAME95
 
    R(0).dwSize = 264
    s = 256 * R(0).dwSize
    l = RasEnumEntries(vbNullString, vbNullString, R(0), s, ln)
    For l = 0 To ln - 1
        a$ = StrConv(R(l).szEntryName(), vbUnicode)
        List1.AddItem Left$(a$, InStr(a$, Chr$(0)) - 1)
    Next
    List1.ListIndex = 0
End Sub
Ciao,


Confermo l'errore e la soluzione trovata da Moreno , ho sbagliato nel
convertire la funzione da VC a VB:
Ecco la versione corretta e la corrispettiva in VC:
[VB]
Private Const RAS_MaxEntryName As Long = 256
Private Type RASENTRYNAME
    dwSize As Long
    szEntryName(256) As Byte  ' la definizione è RAS_MaxEntry + 1
End Type
Private Const SUCCESS As Long = 0&
Private Const RASBASE As Long = 600&
Private Const ERROR_BUFFER_TOO_SMALL As Long = (RASBASE + 3)
Private Const ERROR_NOT_ENOUGH_MEMORY As Long = 8
Private Declare Function RasEnumEntries Lib "RasApi32.dll" Alias _
"RasEnumEntriesA" (ByVal reserved As String, ByVal lpszPhonebook As String,
_
lprasentryname As RASENTRYNAME, lpcb As Long, lpcEntries As Long) As _
Long ' lpcb deve essere passato non come valore poiche viene riaggiornato al
termine della funzione API
Private Sub Conn()
    Dim a$
    Dim Connessioni(RAS_MaxEntryName) As RASENTRYNAME
    Dim lpcb As Long
    Dim NumConnessioni As Long
    Connessioni(0).dwSize = 264 ' la lunghezza non era quella che tu avevi
indicato la stringa è lunga 256 byte e il long 8 byte
    lpcb = (RAS_MaxEntryName + 1) * Connessioni(0).dwSize
    Dim Esegui As Long
    Esegui = RasEnumEntries(vbNullString, vbNullString, Connessioni(0), _
lpcb, NumConnessioni)
    MsgBox Esegui = SUCCESS
    If Esegui = SUCCESS Then
        For i = 1 To NumConnessioni
            a$ = StrConv(Connessioni(i - 1).szEntryName(), vbUnicode)
            List1.AddItem Left$(a$, InStr(a$, Chr$(0)) - 1)
            'List1.AddItem Connessioni(i - 1).szEntryName
        Next i
    End If
End Sub
Private Sub Command1_Click()
Conn
End Sub
[VC]
void Riempi_RAS(HWND d)
{
 RASENTRYNAME rasentryname[RAS_MaxEntryName];
 DWORD   sren;
 DWORD   numconn;
 DWORD   r;
 int    i;
 char   s[10];
 numconn=0;
 sren=sizeof(RASENTRYNAME)*Ras_MaxEntryName;
 rasentryname[0].dwSize=sizeof(RASENTRYNAME);
 r=RasEnumEntries(NULL,NULL,&rasentryname[0],&sren,&numconn);
 for (i=1;i<=(int)numconn;i++)
 {
SendDlgItemMessage(d,IDC_LISTARAS,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)(rasentryn
ame[i-1].szEntryName));
 }
}

(togliete "#" dall'indirizzo)
--------
Ora č tutto OK
Grazie a te e anche a Leonardo Orazi.
Alla prossima
