Cómo utilizar Windows.Storage.Streams.DataWriter con PowerShell
Estoy tratando de usar el método DetachBuffer()
de Windows.Storage.Streams.DataWriter
, pero PowerShell solo reconoce el objeto IBuffer que se supone que debe devolver como __ComObject
. He utilizado otros objetos WinRT exitosamente, pero este me está dando problemas.
[void][Windows.Storage.Streams.DataWriter, Windows.Storage.Streams, ContentType = WindowsRuntime]
$dataWriter = [Windows.Storage.Streams.DataWriter]::new()
$dataWriter.WriteByte(0x01)
$buffer = $dataWriter.DetachBuffer()
$buffer
System.__ComObject
$buffer | Get-Member
TypeName: System.__ComObject
Name MemberType Definition
---- ---------- ----------
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetLifetimeService Method System.Object GetLifetimeService()
GetType Method type GetType()
InitializeLifetimeService Method System.Object InitializeLifetimeService()
ToString Method string ToString()
Supongo que necesito “importar” alguna clase de WinRT que DetachBuffer()
realmente está devolviendo, pero no tengo ni idea de cuál es, aparte de que implementa la interfaz IBuffer.
davy.ai
Parece que el método
DetachBuffer()
está devolviendo un objeto WinRT que PowerShell no reconoce. Para resolver esto, puedes intentar importar el espacio de nombresWindows.Storage.Streams
con el ContentType configurado como WindowsRuntime, al igual que ya lo has hecho conWindows.Storage.Streams.DataWriter
. Puedes importar el espacio de nombres utilizando el siguiente código:Después de importar el espacio de nombres, intenta llamar nuevamente a
DetachBuffer()
y verifica la salida. Ahora debería reconocerse como un objetoIBuffer
.Esto debería producir la siguiente salida:
Ahora puedes utilizar el objeto
IBuffer
devuelto porDetachBuffer()
según sea necesario.