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
es lo mismo no? :/
pero aun no entiendo porque sale diferente :/