如何解决从 C# 中获取指向 Windows.AI.MachineLearning.TensorFloat 中数据的指针
我想在我的 C# .NET Core 5.0 应用程序中获得一个指向 TensorFloat
后面数据的指针。我首先声明 IMemoryBufferByteAccess
:
[ComImport]
[Guid("5b0d3235-4dba-4d44-865e-8f1d0e4fd04d")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
unsafe interface IMemoryBufferByteAccess
{
void GetBuffer(out byte* buffer,out uint capacity);
}
然后,经过推断,我尝试如下使用:
var outputTensor = (TensorFloat)session.Evaluate(binding,"0").Outputs["myAwesomeOutput:0"];
using var outputReference = outputTensor.CreateReference();
((IMemoryBufferByteAccess)outputReference).GetBuffer(out var onnxOutput,out var onnxCapacity);
这会导致 System.InvalidCastException: 'Invalid cast from 'WinRT.IInspectable' to 'IMemoryBufferByteAccess'.'
,这是令人惊讶的,因为 Windows.Media 和 Windows.Graphics 的方法完全相同。 Windows.Foundation.IMemoryBufferReference 的 documentation 甚至声明:
相同的对象标识还必须实现 COM 接口 IMemoryBufferByteAccess。客户端通过来自 IMemoryBufferReference 对象的 QueryInterface 检索 IMemoryBufferByteAccess 接口指针。
我错过了什么?
解决方法
我设法让它工作。首先我必须导入一个扩展方法:
using WinRT;
然后使用As(...)
扩展方法转换为IMemoryBufferByteAccess
来检索指针:
outputReference.As<IMemoryBufferByteAccess>().GetBuffer(out var onnxOutput,out var onnxCapacity);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。