如何以最佳方式将字节数组从 C# 获取到C++ WinRT 组件

How to best get a byte array from C# to a C++ WinRT component

本文关键字:获取 C++ 组件 WinRT 数组 字节数 最佳 方式 字节      更新时间:2023-10-16

我们有一个 WinRT 组件,该组件具有在内部处理C++ unsigned char缓冲区的业务逻辑。我们现在想要从 C# byte[] 提供该缓冲区。完美边界会是什么样子,下面SomeWinRTFunction函数的签名是什么?

void SomeWinRTFunction(something containing bytes from managed land)
{
    IVector<unsigned char> something using the bytes given from managed land;
}

这种问题对于搜索引擎来说似乎太新了,找不到它......

在C++部分中,该方法应接受 uint8 的平台数组(相当于 C# 字节)。

public ref class Class1 sealed
{
public:
    Class1();
    //readonly array
    void TestArray(const Platform::Array<uint8>^ intArray)
    {
    }
    //writeonly array
    void TestOutArray(Platform::WriteOnlyArray<uint8>^ intOutArray)
    {
    }
};

在 C# 部分中传递字节数组:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        Byte[] b = new Byte[2];
        b[0] = 1;
        var c = new Class1();
        c.TestArray(b);
        c.TestOutArray(b); 
    }

在 WinRT IVector 中被投影为 IList,我不确定字节 ->无符号字符,但我怀疑也是。

C#

byte[] array;
SomeWinRTFunction(array);

C++

void SomeWinRTFunction(IVector<unsigned char> bytes) 
{ 
    IVector<unsigned char> something using the bytes given from managed land; 
} 

本白皮书可能会提供更多的启示。