elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  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 2,364 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


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

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

Código
  1.  
  2. ' Global
  3. private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
  4.  
  5.  
  6. ' CODIGO UNO:
  7.  
  8. Dim A   As String
  9. Dim B   As Long
  10. Dim C(0 To 20) As Byte
  11.  
  12.    A = "ABCDE"
  13.    Call CopyMemory(C(0), ByVal A, LenB(A))
  14.  
  15.  
  16.    For B = 0 To 20
  17.        Debug.Print Chr$(C(B))
  18.    Next
  19.  
  20. Output:
  21. A
  22. B
  23. C
  24. D
  25. E
  26. NULL
  27. NULL
  28. NULL
  29. ...
  30.  
  31.  
  32. ' CODIGO DOS
  33.  
  34. Dim A   As String
  35. Dim pA  As Long
  36. Dim B   As Long
  37. Dim C(0 To 20) As Byte
  38.  
  39.    A = "ABCDE"
  40.    pA = StrPtr(A)
  41.  
  42.    Call CopyMemory(C(0), ByVal pA, LenB(A))
  43.  
  44.  
  45.    For B = 0 To 20
  46.        Debug.Print Chr$(C(B))
  47.    Next
  48.  
  49.  
  50. OUTPUT:
  51. A
  52. NULL
  53. B
  54. NULL
  55. C
  56. NULL
  57. D
  58. NULL
  59. E
  60. NULL
  61. ...etc
  62.  
  63.  

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


Desconectado Desconectado

Mensajes: 2.633


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 am »

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

x64core


Desconectado Desconectado

Mensajes: 1.908


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

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

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


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

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

The Dark Shadow is my passion.
x64core


Desconectado Desconectado

Mensajes: 1.908


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

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
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


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

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 pm por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Blind SQLi - Select a una BD distinta
Nivel Web
kicking people 4 4,463 Último mensaje 16 Diciembre 2009, 18:09 pm
por WHK
Reconectar con IP distinta
Foro Libre
qeno 0 2,760 Último mensaje 5 Diciembre 2010, 19:47 pm
por qeno
Escritorio remoto con distinta red [solucionado]
Redes
Perchuto 2 32,888 Último mensaje 19 Mayo 2011, 22:58 pm
por Perchuto
[RUBY] Es posible variable distinta dentro de for?
Scripting
tbgio 7 3,345 Último mensaje 27 Julio 2011, 21:54 pm
por tbgio
Porque no puedo pasarle la direccion de la cadena? strtol
Programación C/C++
7emiliosk8 9 4,064 Último mensaje 12 Febrero 2017, 02:55 am
por 7emiliosk8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines