Código [Seleccionar]
Sub UnloadForms()
Dim csForm
For Each csForm In Forms
Call Unload(csForm)
Next
End Sub
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
Sub UnloadForms()
Dim csForm
For Each csForm In Forms
Call Unload(csForm)
Next
End Sub
Cita de: Garopa en 19 Marzo 2006, 21:59 PM
Tienen alguna web donde encuentren las apis que utiliza las web CAM¿
00000000
11111111
7 6 5 4 3 2 1 0 <- Índices
1 1 1 1 1 1 1 1 <- Bits
7 6 5 4 3 2 1 0 <- Índices
128 64 32 16 8 4 2 1 <- Valores
1 1 1 1 1 1 1 1 <- Bits
1*128 + 1*64 + 1*32 + 1*16 + 1*8 + 1*4 + 1*2 + 1*1 = 255
|Byte 3| |Byte 1| |Byte 2| |Byte 0|
11111111 11111111 11111111 11111111
Dirección + 0 Byte 0
Dirección + 1 Byte 1
Dirección + 2 Byte 2
Dirección + 3 Byte 3
Dirección + 0 Byte 3
Dirección + 1 Byte 2
Dirección + 2 Byte 1
Dirección + 3 Byte 0
Property Get HiByte(ByVal Word As Integer) As Byte
' Devuelve el Byte alto del Word especificado.
'
If Word And &H8000 Then
If Not (Word Or &HFF) = &HFFFFFFFF Then Word = (Word Xor &HFF)
HiByte = &H80 Or ((Word And &H7FFF) \ &HFF)
Else
HiByte = Word \ 256
End If
End Property
Property Get HiWord(Dword As Long) As Integer
' Devuelve el Word alto del DWord especificado.
'
If Dword And &H80000000 Then
HiWord = (Dword / 65535) - 1
Else
HiWord = Dword / 65535
End If
End Property
Property Get LoByte(Word As Integer) As Byte
' Devuelve el Byte bajo del Word especificado.
'
LoByte = (Word And &HFF)
End Property
Property Get LoWord(Dword As Long) As Integer
' Devuelve el Word bajo del DWord especificado.
'
If Dword And &H8000& Then
LoWord = &H8000 Or (Dword And &H7FFF&)
Else
LoWord = Dword And &HFFFF&
End If
End Property
Property Get MakeWord(ByVal bHi As Byte, ByVal bLo As Byte) As Integer
' Crea un Word a partir de sus dos componentes Byte.
'
If bHi And &H80 Then
MakeWord = (((bHi And &H7F) * 255) + bLo) Or &H7FFF
Else
MakeWord = (bHi * 255) + bLo
End If
End Property
Property Get MakeDWord(wHi As Integer, wLo As Integer) As Long
' Crea un DWord a partir de sus dos componentes Word.
'
If wHi And &H8000& Then
MakeDWord = (((wHi And &H8000&) * 65536) Or (wLo And &HFFFF&)) Or &H80000000
Else
MakeDWord = (wHi * &H10000) + wLo
End If
End Property
btData(0)=65
btData(1)=66
btData(2)=67
btData(3)=68
btData(4)=69
btData(5)=70
Pos Valor
1000 65
1001 66
1002 67
1003 68
1004 69
1005 70
65 66 67 68 69 70 ' Los espacios sólo son para separar, en la realidad no existen.
65 66 67 68 69 70 <- Valor numérico
A B C D E F <- Representación gráfica
______DWord______
_WordL_ _WordH_
BL BH BL BH
__ __ __ __
65 66 67 68
Sub TestMem()
Dim btData(3) As Byte
Dim iLoWord As Integer, iHiWord As Integer
Dim lDWord As Long
btData(0) = 65 ' Byte bajo del Word bajo.
btData(1) = 66 ' Byte alto del Word bajo.
btData(2) = 67 ' Byte bajo del Word alto.
btData(3) = 68 ' Byte alto del Word alto.
iLoWord = MakeWord(btData(1), btData(0)) ' Crea el Word bajo.
iHiWord = MakeWord(btData(3), btData(2)) ' Crea el Word alto.
lDWord = MakeDWord(iHiWord, iLoWord) ' Crea el DWord.
Debug.Print Hex$(VarPtr(lDWord))
Stop
End Sub
Function DWordToString(dw As Long) As String
DWordToString = Chr$(LoByte(LoWord(dw))) & _
Chr$(HiByte(LoWord(dw))) & _
Chr$(LoByte(HiWord(dw))) & _
Chr$(HiByte(HiWord(dw)))
End Function
Function StringToDWord(Str As String) As Long
If Len(Str) < 4 Then Str = Str & String$(4 - Len(Str), 0)
StringToDWord = MakeDWord( _
MakeWord( _
Asc(Mid$(Str, 4)), _
Asc(Mid$(Str, 3, 1)) _
), _
MakeWord( _
Asc(Mid$(Str, 2, 1)), _
Asc(Mid$(Str, 1, 1)) _
) _
)
End Function
Sub TestMem()
Dim btData(3) As Byte
Dim iLoWord As Integer, iHiWord As Integer
Dim lDWord As Long
btData(0) = 65 ' Byte bajo del Word bajo.
btData(1) = 66 ' Byte alto del Word bajo.
btData(2) = 67 ' Byte bajo del Word alto.
btData(3) = 68 ' Byte alto del Word alto.
iLoWord = MakeWord(btData(1), btData(0)) ' Crea el Word bajo.
iHiWord = MakeWord(btData(3), btData(2)) ' Crea el Word alto.
lDWord = MakeDWord(iHiWord, iLoWord) ' Crea el DWord.
Debug.Print DWordToString(lDWord)
Stop
End Sub
lData = 123456
Sub PassByRef(Var As Long)
Var = 654321
End Sub
Sub PassByVal(ByVal Var As Long)
Var = 654321
End Sub
Sub TestPass()
Dim lDataByRef&, lDataByVal&
lDataByRef = 123456
lDataByVal = 123456
Debug.Print "El valor actual de lDataByRef es " & lDataByRef
Debug.Print "El valor actual de lDataByVal es " & lDataByVal
Call PassByRef(lDataByRef)
Call PassByVal(lDataByVal)
Debug.Print "El valor de lDataByRef es ahora " & lDataByRef
Debug.Print "El valor de lDataByVal es ahora " & lDataByVal
End Sub
Dim sData$
sData = "Hola mundo"
HOLA MUNDO\0 ' \0 = Caracter nulo
Len Cadena End
| |H O L A M U N D O|\0\0|
Sub StrTest()
Dim sData$
sData = "Hola mundo"
Debug.Print Hex$(VarPtr(sData))
Debug.Print Hex$(StrPtr(sData))
Stop
End Sub
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Sub CopyMem()
Dim lSourceData&, lDestData&
lSourceData = 123456
Call CopyMemory(lDestData, lSourceData, Len(lSourceData))
Debug.Print "Ahora lDestData es igual a " & lDestData
Stop
End Sub
Sub CopyMem()
Dim lSourceData&, lDestData&
lSourceData = 123456
Call CopyMemory(ByVal VarPtr(lDestData), ByVal VarPtr(lSourceData), Len(lSourceData))
Debug.Print "Ahora lDestData es igual a " & lDestData
Stop
End Sub
Sub CopyMem()
Dim lSourceData&, lDestData&
lSourceData = 123456
Call CopyMemory(lDestData, ByVal lSourceData, Len(lSourceData))
End Sub
Sub CopyMem()
Dim lSourceData&, lDestData&
lSourceData = VarPtr(lSourceData)
lDestData = VarPtr(lDestData)
Call CopyMemory(ByVal lDestData, lSourceData, Len(lSourceData))
Debug.Print "Ahora lDestData es igual a " & lDestData
Stop
End Sub
Type SomeData
Size As Integer
Registro1 As Long
Registro2 As Long
Registro3 As Currency
Registro4 As String
End Type
2 4 4 8 4
Posición más baja|..|....|....|........|....|Posición más alta
Offset Campo
1000 Size
1002 Registro1 ' VarPtr(Size) + 2
1006 Registro2 ' VarPtr(Registro1) + 4
1010 Registro3 ' VarPtr(Registro2) + 4
1018 Registro4 ' VarPtr(Registro3) + 8
Sub CopyMemStr()
Dim sSrcData$, sDestData$
sSrcData = "Hola mundo"
sDestData = String$(Len(sSrcData), 0)
Call CopyMemory(ByVal sDestData, ByVal sSrcData, LenB(sSrcData))
Debug.Print sSrcData, sDestData
Stop
End Sub
Datos de sSrcData
0062D920 14 00 00 00 48 00 6F 00 6C 00 61 00 20 00 6D 00 75 00 6E 00 64 00 6F 00 ....H.o.l.a. .m.u.n.d.o.
0062D938 00 00 72 00 79 00 00 00 CC 00 00 A0 00 00 00 00 EC 0A 67 00 FF FF FF FF ..r.y...Ì.. ....ì.g.ÿÿÿÿ
0062D950 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FC DE 62 00 ÿÿÿÿ................üÞb.
0062D968 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 C8 06 67 00 ....................È.g.
0062D980 FF FF FF FF 6C 13 67 00 00 00 00 00 0C 65 61 00 00 00 00 00 14 DF 62 00 ÿÿÿÿl.g......ea......ßb.
0062D998 01 00 00 00 AC A1 63 00 ....¬¡c.
sDestData = String$(Len(sSrcData), 0)
Datos de sDestData antes de llamar a CopyMemory
0066E048 14 00 00 00 ....
0066E060 48 00 6F 00 6C 00 61 00 20 00 6D 00 75 00 6E 00 64 00 6F 00 00 00 02 00 ........................
0066E078 0E 00 18 02 78 00 00 A0 18 E0 66 00 80 1E 67 00 B0 2A 67 00 30 2B 67 00 ....x.. .àf.€.g.°*g.0+g.
0066E090 9C 2B 67 00 AC 2B 67 00 BC 2B 67 00 A0 29 67 00 5C 37 67 00 70 37 67 00 œ+g.¬+g.¼+g. )g.\7g.p7g.
0066E0A8 80 37 67 00 8C 37 67 00 98 37 67 00 A8 37 67 00 B4 37 67 00 C4 37 67 00 €7g.Œ7g.˜7g.¨7g.´7g.Ä7g.
0066E0C0 D8 37 67 00 E8 37 67 00 F8 37 67 00 08 38 67 00 18 38 67 00 28 38 67 00 Ø7g.è7g.ø7g..8g..8g.(8g.
0066E0D8 38 38 67 00 88g.
Call CopyMemory(ByVal sDestData, ByVal sSrcData, LenB(sSrcData))
Datos de sSrcData
0062D920 14 00 00 00 48 00 6F 00 6C 00 61 00 20 00 6D 00 75 00 6E 00 64 00 6F 00 ....H.o.l.a. .m.u.n.d.o.
0062D938 00 00 72 00 79 00 00 00 CC 00 00 A0 00 00 00 00 EC 0A 67 00 FF FF FF FF ..r.y...Ì.. ....ì.g.ÿÿÿÿ
0062D950 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FC DE 62 00 ÿÿÿÿ................üÞb.
0062D968 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 C8 06 67 00 ....................È.g.
0062D980 FF FF FF FF 6C 13 67 00 00 00 00 00 0C 65 61 00 00 00 00 00 14 DF 62 00 ÿÿÿÿl.g......ea......ßb.
0062D998 01 00 00 00 AC A1 63 00 ....¬¡c.
Datos de sDestData luego de llamar a CopyMemory
0066E048 14 00 00 00 ....
0066E060 48 00 6F 00 6C 00 61 00 20 00 6D 00 75 00 6E 00 64 00 6F 00 00 00 02 00 H.o.l.a. .m.u.n.d.o.....
0066E078 0E 00 18 02 78 00 00 A0 18 E0 66 00 80 1E 67 00 B0 2A 67 00 30 2B 67 00 ....x.. .àf.€.g.°*g.0+g.
0066E090 9C 2B 67 00 AC 2B 67 00 BC 2B 67 00 A0 29 67 00 5C 37 67 00 70 37 67 00 œ+g.¬+g.¼+g. )g.\7g.p7g.
0066E0A8 80 37 67 00 8C 37 67 00 98 37 67 00 A8 37 67 00 B4 37 67 00 C4 37 67 00 €7g.Œ7g.˜7g.¨7g.´7g.Ä7g.
0066E0C0 D8 37 67 00 E8 37 67 00 F8 37 67 00 08 38 67 00 18 38 67 00 28 38 67 00 Ø7g.è7g.ø7g..8g..8g.(8g.
0066E0D8 38 38 67 00 88g.
Variable sSrcData (007FF540) y sDestData (7FF53C)
007FF530 00 00 00 00 00 00 00 00 00 00 00 00 60 E0 66 00 24 D9 62 00 D4 F5 7F 00 ............`àf.$Ùb.Ôõ.
007FF548 81 1B 67 00 04 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 6B 19 C0 0F .g.................k.À.
Windows NT Services, Edición Empresarial | La partición de 3 GB en la memoria baja (0x00000000 a 0xBFFFFFFF [3221225471]) está disponible para los procesos, y una partición de 1 GB en la memoria alta (0xC0000000 [3221225472] a 0xFFFFFFFF [4294967295]) está reservada para el sistema |
Window NT | La partición de 2 GB en la memoria baja (0x00000000 a 0x7FFFFFFF [2147483648]) está disponible para los procesos y la partición de 2 GB de en la memoria alta (0x80000000 (2147483648) a 0xFFFFFFFF [4294967295]) está reservado para el sistema. |
Windows 95 y Windows 98 | La partición de 4 GB en la memoria baja (0x00000000 a 0x00000FFF [4095]) es usada para compatibilidad con MS-DOS y Windows de 16 bits, la siguiente partición aproximadamente de 2 GB (0x00400000 [4194304] a 0x7FFFFFFF [2147483647] está disponible por los procesos para uso privado, la siguiente partición de 1 GB (0x80000000 [2147483648] a 0xBFFFFFFF [3221225471]) es compartida por todos los procesos de Win32, y la partición de 1 GB en memoria alta (0xC0000000 [3221225472] a 0xFFFFFFFF [4294967295]) es usada por el sistema. |
Libre | Una página libre no está actualmente accesible, pero está disponible para ser encargada o reservada |
Reservada | Una página reservada es un bloque en el espacio de direcciones virtuales de un proceso que ha sido fijado para usos futuros. El proceso no puede acceder a una página reservada, y no hay almacenamiento físico asociado con esta, o sea que no se aumenta el tamaño de la swap. Una página reservada reserva un rango de direcciones virtuales que no pueden ser usadas subsecuentemente por otras funciones de asignación. Un proceso puede usar la función VirtualAlloc para reservar páginas de su espacio de memoria y luego encargar las páginas reservadas. Luego se puede usar VirtualFree para descargarlas. |
Encargada | Una página encargada es una para la cual ha sido asignado almacenamiento físico (en la memoria física o en el disco). Puede ser protegida para permitir o no el acceso o el acceso sólo-lectura, o puede tener acceso para lectura y escritura. Un proceso puede usar la función VirtualAlloc para asignar páginas encargadas. Las funciones GlobalAlloc y LocalAlloc asignan páginas encargadas con acceso para lectura-escritura. Una página encargada asignada por VirtualAlloc puede ser "descargada" por la función VirtualFree, con la cual se descargan las páginas almacenadas y cambia el estado de la página a reservada. |