bueno tengo esa incognita miren estos dos codigos uno devuelve en ANSI y otro en UNICODE porque?
practicamente se hace lo mismo :-\
' 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 :/
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 :)
Cita de: raul338 en 24 Octubre 2011, 10:54 AM
Se llama magia entre vb6 y Windows :P
:xD ... :P vaya vb... ok gracias primo, hermano ;D
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!¡.
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
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!¡.