PDA

Visualizza la versione completa : [VB]forse mi sono perso qlcosa..


Gigi84
27-11-2002, 22:18
preso da www.allapi.net (mitico sito!!)



'example by Donavon Kuhn (Donavon.Kuhn@Nextel.com)
Private Const MAX_COMPUTERNAME_LENGTH As Long = 31
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub Form_Load()
Dim dwLen As Long
Dim strString As String
'Create a buffer
dwLen = MAX_COMPUTERNAME_LENGTH + 1
strString = String(dwLen, "X")
'Get the computer name
GetComputerName strString, dwLen
'get only the actual data
strString = Left(strString, dwLen)
'Show the computer name
MsgBox strString
End Sub


io ora mi chiedo un cosa.. se il parametro lpBuffer passato ByVal, come pu la funzione metterci il nome del Computer??
nel senso: se il passaggio ByVal-->per copia come pu la funzione scriverci dentro?? non dovrebbe essere passata ByRef??

Siccome il codice funziona, in quello che dico c' "something wrong"..
forse non ho capito bene qlcosina.. potreste svelarmi l'arcano?

Ciao!!

:ciauz: :ciauz:

Gigi84
28-11-2002, 21:47
dai.. una rispostina.. anche piccolina..

:gren:


:ciauz: :ciauz:

xegallo
28-11-2002, 21:58
semplicemente perch passandogli anche una lunghezza buffer non ha bisogno di un indirizzo di memorie ma di uno spazio fisico dove scrivere se infatti prima non riempi la variabile la funzione crea problemi
in pi la funzione si protegge dall'invio a un indirizzo di memoria ad essa non raggiungibile
infatti se esiste la stringa sicura che l'area di memoria che le serve per produrre un risultato sufficiente ed raggiungibile

Gigi84
28-11-2002, 22:30
forse non ho capito bene la tua risposta..
se io non gli passo l'indirizzo con un byref la funzione come fa fisicamene a scrivere nella MIA variabile..?? la funzione non ha l'indirizzo quindi non sa dove scrivere.. giusto?!:confused:

:ciauz:

xegallo
28-11-2002, 23:14
Originariamente inviato da Gigi84
forse non ho capito bene la tua risposta..
se io non gli passo l'indirizzo con un byref la funzione come fa fisicamene a scrivere nella MIA variabile..?? la funzione non ha l'indirizzo quindi non sa dove scrivere.. giusto?!:confused:

:ciauz:
perch va a sovrascrivere il contenuto di lpbuffer indipendente mente dalla sua allocazione di memoria che potrebbe essere riservata alla tua applicazione quindi la dll non avrebbe accesso

Gigi84
29-11-2002, 14:54
e come fa se non sa dov'??
io le passo solo una copia..

:ciauz:

Loading