如何最好地将C#中的字节数组转换为C ++ WinRT组件

时间:2012-06-08 12:23:20

标签: c# c++ windows-runtime

我们有一个带有业务逻辑的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;
}

这类问题对搜索引擎来说似乎太新了......

2 个答案:

答案 0 :(得分:7)

在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); 

    }

答案 1 :(得分:2)

在WinRT中,IVector被投射为IList,我不确定字节 - &gt; unsigned char但我怀疑也是。

C#

byte[] array;
SomeWinRTFunction(array);

C ++

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

whitepaper可能会有更多的亮点。