如何通过 PowerShell 使用 Windows.Storage.Streams.DataWriter

Pet*_*ter 5 powershell windows-runtime uwp

我正在尝试使用DetachBuffer()的方法Windows.Storage.Streams.DataWriter,但 PowerShell 只识别它应该返回的 IBuffer __ComObject。我已经成功地使用了其他 WinRT 对象,但这个对象给我带来了麻烦。

[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() 
Run Code Online (Sandbox Code Playgroud)

我假设我需要“导入” DetachBuffer() 实际上返回的一些 WinRT 类,但除了它实现 IBuffer 接口之外,我不知道它是什么。

Mr.*_*ter 1

在寻找类似问题(IInputStream Interface)的答案时,我发现了这个Reddit 线程,它获取 IBuffer 的内容,如下所示:

[System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions].
GetMethod(
    'ToArray',
    [type[]]@([Windows.Storage.Streams.IBuffer])).
Invoke($null, @($buffer))
Run Code Online (Sandbox Code Playgroud)

从您的问题来看,尚不清楚您想要实现什么目标,但请告诉我这是否有帮助。如果没有,请修改问题,以便清楚您想用 IBuffer 做什么。

正如下面的评论者正确添加的那样:PowerShell 不适用于没有具体类型的 WinRT 对象(在本例中为 IBuffer 接口)。我一直在使用 .Invoke() 来解决这个问题,但以我非常有限的经验来看,这很麻烦,而且并不总是能给你真正需要的东西。