elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 08:55  


Tema destacado: Recuperar cuenta de Google, GMail, Youtube

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  porque Salida de cadena distinta?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: porque Salida de cadena distinta?  (Leído 340 veces)
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
porque Salida de cadena distinta?
« en: 24 Octubre 2011, 09:36 »

bueno tengo esa incognita miren estos dos codigos uno devuelve en ANSI y otro en UNICODE porque?
practicamente se hace lo mismo  :-\

Código
 
' Global
private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
 
 
' CODIGO UNO:

Dim A   As String
Dim B   As Long
Dim C(0 To 20) As Byte
 
   A = "ABCDE"
   Call CopyMemory(C(0), ByVal A, LenB(A))
 
 
   For B = 0 To 20
       Debug.Print Chr$(C(B))
   Next
 
Output:
A
B
C
D
E
NULL
NULL
NULL
...
 
 
' CODIGO DOS

Dim A   As String
Dim pA  As Long
Dim B   As Long
Dim C(0 To 20) As Byte
 
   A = "ABCDE"
   pA = StrPtr(A)
 
   Call CopyMemory(C(0), ByVal pA, LenB(A))
 
 
   For B = 0 To 20
       Debug.Print Chr$(C(B))
   Next
 
 
OUTPUT:
A
NULL
B
NULL
C
NULL
D
NULL
E
NULL
...etc
 
 

la unica diferencia es el tipo de variable de la direccion de la cadena
pero aun asi en el primer codigo pasar de tipo String a las API es pasar la direccion ( sistema BSTR )
y en el segundo codigo se obtiene explicitamente primero la direccion y se le pasa la direccion :P
es lo mismo no? :/
pero aun no entiendo porque sale diferente :/


En línea
raul338
Moderador
***
Desconectado Desconectado

Mensajes: 2.372


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: porque Salida de cadena distinta?
« Respuesta #1 en: 24 Octubre 2011, 10:54 »

Uno nunca lo sabrá :xD
Se llama magia entre vb6 y Windows :P

Siempre uso RtlMoveMemory con todos sus parámetros en ByVal y Long, lleno de VarPtr y StrPtr para no tener drama :)



En línea

RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: porque Salida de cadena distinta?
« Respuesta #2 en: 24 Octubre 2011, 14:07 »

Se llama magia entre vb6 y Windows :P
:xD ... :P vaya vb... ok gracias primo, hermano  ;D
En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: porque Salida de cadena distinta?
« Respuesta #3 en: 24 Octubre 2011, 20:04 »

Si pasar una varible string directamente se crea otra en su variacion ANSI si pasas el puntero no se toca la string y se toma la original en su Modo Unicode.

como he dicho anteriormente en las declaraciones apis, si alguno de sus parametros requiere una entra de un puntero para entrada/salida de informacion o un buffer, etc, es mejor usar byval...

Dulces Lunas!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: porque Salida de cadena distinta?
« Respuesta #4 en: 24 Octubre 2011, 20:07 »

suena interesante tio pero me pongo a pensar que el nombre de la variable es en realidad un puntero al buffer
bueno pensandolo bien entonces para las strings y usar APIs hay dos clases de punteros... :P
sino diera error digo :P y los punteros si obtenemos la direccion es distinta :P
En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: porque Salida de cadena distinta?
« Respuesta #5 en: 24 Octubre 2011, 20:10 »

solo hay punteros y referencias, hay variaciones de puntero a puntero, etc... en las apis ojo.

Es decir, de una manera mas concreta:

* Cuando pasas un puntero se pasa en variacion Unicode (no son punteros es la dirrecion).
* Cuando se pasa por referencia se crea otra cadena en su variacion ANSI...

Dulces Lunas!¡.
« Última modificación: 24 Octubre 2011, 20:14 por BlackZeroX (Astaroth) » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ip distinta
GNU/Linux
..SnIgCiO.. 0 309 Último mensaje 22 Marzo 2004, 19:56
por ..SnIgCiO..
[MOD]Mezclar memorias de distinta velocidad
Hardware
INQUIETO 2 453 Último mensaje 24 Octubre 2004, 02:39
por USS-234
Distinta MAC, ¿distinto usuario?
Hacking Wireless
Noemir 6 610 Último mensaje 13 Marzo 2006, 14:02
por Noemir
dos routers y distinta señal
Redes
uKeIn 8 1,676 Último mensaje 9 Mayo 2008, 16:54
por huike
Reconectar con IP distinta
Foro Libre
qeno 0 1,103 Último mensaje 5 Diciembre 2010, 19:47
por qeno
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines