Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Couple questions about a procedure in a class definition
Message
De
24/08/2007 08:29:38
Jay Johengen
Altamahaw-Ossipee, Caroline du Nord, États-Unis
 
 
À
23/08/2007 20:06:27
Information générale
Forum:
Visual FoxPro
Catégorie:
Classes - VCX
Versions des environnements
Visual FoxPro:
VFP 8 SP1
Divers
Thread ID:
01250023
Message ID:
01250147
Vues:
13
>>Couple questions as to what this procedure is doing. It works, but I'm not sure about the "@strData" in the GETDATA. Is that a variable by reference? So that after GETDATE runs, the value of strData is returned? Also, why the "SPACE(256)" line? Is it to define it as a string, or to define the length, or both? It works with strings much larger than 256, so I'm just curious what the purpose is. Thanks!
>>
>> PROCEDURE DMSWinsockControlEvents_DataArrival(bytesTotal AS NUMBER) AS VOID ;
>> HELPSTRING "Occurs when data has been received from the remote computer"
>>
>> strData = SPACE(256) && Define string to pass to GetData
>>
>> THIS.oSock.GETDATA(@strData)
>>
>> ? strData
>>
>> ENDPROC
>
>You can be calling a function that requires a certain size for placing the value in it. So you have to allocate the space before the call. This is true for the Win32 API calls -- they expect certain data types and sizes. If the size is too small, you can have a buffer overrun error -- the string is placed in an allocated memory block that is too small and extends beyond the allocated space (over writing anything after the space). So, you have to allocate the memory; SPACE(256) allocates 256 bytes, then the address of the memory block is passed to the method call @strData. This allows the function to place the value into the allocated memory block.

Ok, but when I run my code, the size of strData is way over 256, but it still works. Am I just lucky?
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform