Copiar datos de una matriz de caracteres administrada a un puntero de memoria no administrada desde PowerShell utilizando la clase Marshal (funcionamiento inseguro)
Lo primero que hay que indicar es que el funcionamiento es inseguro, incluso el propio PowerShell falla a veces cuando se ejecuta el siguiente script.
$a = 'holass' # SizeOf: Devuelve el tamaño no administrado, en bytes, de una clase. $size = [Runtime.InteropServices.Marshal]::SizeOf($a[0])*$a.Length # AllocHGlobal: Asigna memoria de la memoria no administrada del proceso. $ptr0 = [Runtime.InteropServices.Marshal]::AllocHGlobal($size) # Copy: Copia los datos de una matriz administrada a un puntero de memoria no administrada o de un puntero de memoria no administrada a una matriz administrada. [Runtime.InteropServices.Marshal]::Copy($a,0,$ptr0,$a.Length) # PtrToStringAuto: Asigna un String administrado y copia en él total o parcialmente una cadena no administrada. [Runtime.InteropServices.Marshal]::PtrToStringAuto($ptr0) # FreeHGlobal: Libera memoria previamente asignada de la memoria no administrada del proceso. [Runtime.InteropServices.Marshal]::FreeHGlobal($ptr0)
Resultado de la ejecución en Windows

Resultado de la ejecución en Mac
