Problema copiando Estructuras a Bytes xP

Iniciado por x64core, 10 Noviembre 2011, 07:35 AM

0 Miembros y 1 Visitante están viendo este tema.

x64core

Hola mundo ;D
bueno e me cruzado con un problemon que tengo horas tratando de saber que pasa :P
miren el codigo alguien sabe que pasaaaa!?

Código (VB) [Seleccionar]

Private declare sub RtlMoveMemory lib "Kernel32.dll" (byval dest as long , Byval Src as long, Byval ln as long)

private type MY
Str1 as string
Str2 as string
end type

sub main()
dim NEW(50) as byte
dim M as MY

M.Str1 = "ABCD"
M.Str2 = "EFGH"

rtlmovememory varptr(new(0)), varptr(M) , lenb(M)

end sub



los valores del array son:
116,153,61,5

y lo que realmente me esperaba era:
65,66,67,68 :P


luego hice esto:

Código (VB) [Seleccionar]
dim A() as byte

A = M.Str1 '// la misma estructura


y tambien esto, y me resulto mas extraño O.o

Código (VB) [Seleccionar]
Private Sub Form_Load()
Dim M As MY

M.A = 50000: M.B = 4000
M.C = "HELLO"


Debug.Print Len(M.A) 4
Debug.Print Len(M.B) 2
Debug.Print Len(M.C) 5
Debug.Print "------"  11

Debug.Print LenB(M.A) 4
Debug.Print LenB(M.B) 2
Debug.Print LenB(M.C) 10
Debug.Print "------" ' 16

Debug.Print Len(M) 10
Debug.Print LenB(M) 12!!!

End Sub




alguien sabe que pasa ? mas que todo lo que quiero es aprender ;D y saber que pasa :P aunque me imagino
que es VB  :-\ que tristesa  :-\

BlackZeroX

las estructuras de C/C++ es la misma teoria que la de VB6... si las variables NO TIENEN LONGITUD por ejemplo una string... se convertira en un apuntador... me da un poco de pereza volver a explicarlo... busca un tema similar (lo explique a detalle) donde explico que onda y el por que de cada cosa...

Dulces Lunas!¡.
The Dark Shadow is my passion.

x64core

Es cierto!! :xD como se me habria olvidado x3
en las estrucuturas las string son punteros xP

Private declare sub RtlMoveMemory lib "Kernel32.dll" (byval dest as long , Byval Src as long, Byval ln as long)

private type MY
Str1 as string
Str2 as string
end type

sub main()
dim NEW(50) as byte
dim M as MY

M.Str1 = "ABCD"
M.Str2 = "EFGH"

rtlmovememory varptr(new(0)), varptr(M) , lenb(M)

end sub


entonces en este codigo lo que realmente estoy copiando a "New" son los punteros de las string no? x)
hice este :P

Private declare sub RtlMoveMemory lib "Kernel32.dll" (byval dest as long , Byval Src as long, Byval ln as long)

private type MY
A as integer
Str1 as string
C as long
end type

sub main()
dim NEW(50) as byte
dim M as MY

M.A = 4000
M.Str1 = "ABCD"
M.C = 45000

rtlmovememory varptr(new(0)), varptr(M) , lenb(M)

end sub


lo raro es el array queda asi con esos valores :P
160
15
0
0
220
64
52
5
200
175

esta raro :P no puede ser que todos sean punteros :| o si



Mil gracias BlackZeroX ;D

BlackZeroX

#3
Vb6 trabaja de un modo Horroroso... pero ten encuenta esto...

Array (De cual quier tipo) y String sin longitud inicial seran considerados como punteros internos (en la memoria claro)...

Dulces Lunas!¡.
The Dark Shadow is my passion.

x64core