如何在 PowerShell 中使用 Windows.Storage.Streams.DataWriter
How to use Windows.Storage.Streams.DataWriter with PowerShell
我正在尝试使用 Windows.Storage.Streams.DataWriter
的方法 DetachBuffer()
,但 PowerShell 仅将它应该 return 识别为 __ComObject
的 IBuffer。我已经成功地使用了其他 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()
我假设我需要“导入”一些 DetachBuffer() 实际上是 return 的 WinRT class,但除了它实现 IBuffer 接口之外我不知道它是什么。
在我寻找类似问题的答案时(IInputStream 接口),我发现了这个 Reddit thread 它获取 IBuffer 的内容如下:
[System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions].
GetMethod(
'ToArray',
[type[]]@([Windows.Storage.Streams.IBuffer])).
Invoke($null, @($buffer))
从你的问题来看,不清楚你想要实现什么,但如果这有帮助,请告诉我。如果不是,请修改问题,以便清楚您要使用 IBuffer 做什么。
正如下面的评论者正确添加的那样:PowerShell does not work with WinRT object that have no concrete type(在本例中为 IBuffer 接口)。我一直在使用 .Invoke() 来解决这个问题,但根据我非常有限的经验,这很麻烦,而且并不总能为您提供真正需要的东西。
我正在尝试使用 Windows.Storage.Streams.DataWriter
的方法 DetachBuffer()
,但 PowerShell 仅将它应该 return 识别为 __ComObject
的 IBuffer。我已经成功地使用了其他 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()
我假设我需要“导入”一些 DetachBuffer() 实际上是 return 的 WinRT class,但除了它实现 IBuffer 接口之外我不知道它是什么。
在我寻找类似问题的答案时(IInputStream 接口),我发现了这个 Reddit thread 它获取 IBuffer 的内容如下:
[System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions].
GetMethod(
'ToArray',
[type[]]@([Windows.Storage.Streams.IBuffer])).
Invoke($null, @($buffer))
从你的问题来看,不清楚你想要实现什么,但如果这有帮助,请告诉我。如果不是,请修改问题,以便清楚您要使用 IBuffer 做什么。
正如下面的评论者正确添加的那样:PowerShell does not work with WinRT object that have no concrete type(在本例中为 IBuffer 接口)。我一直在使用 .Invoke() 来解决这个问题,但根据我非常有限的经验,这很麻烦,而且并不总能为您提供真正需要的东西。