如何最好地从C#到C+获取字节数组+;WinRT组件 我们有一个WrRT组件,它具有业务逻辑,它内部对C++ +代码>未签名的char < /C>缓冲区进行了内部处理。我们现在想从一个C#字节[]向该缓冲区提供数据。完美边界是什么样的,即下面的SomeWinRTFunction函数的签名是什么 void SomeWinRTFunction(something containing bytes from managed land) { IVector<unsigned char> something using the bytes given from managed land; } void SomeWinRTFunction(包含托管区字节的内容) { IVector使用从管理的土地中给定的字节选择某物; }

如何最好地从C#到C+获取字节数组+;WinRT组件 我们有一个WrRT组件,它具有业务逻辑,它内部对C++ +代码>未签名的char < /C>缓冲区进行了内部处理。我们现在想从一个C#字节[]向该缓冲区提供数据。完美边界是什么样的,即下面的SomeWinRTFunction函数的签名是什么 void SomeWinRTFunction(something containing bytes from managed land) { IVector<unsigned char> something using the bytes given from managed land; } void SomeWinRTFunction(包含托管区字节的内容) { IVector使用从管理的土地中给定的字节选择某物; },c#,c++,windows-runtime,C#,C++,Windows Runtime,对于搜索引擎来说,这类问题似乎太新了……在WinRT中,IVector被投影为IList,我不确定byte->unsigned char,但我怀疑也是 C# C++ void SomeWinRTFunction(IVector字节) { IVector使用从管理的土地中给定的字节选择某物; } 这可能会有更多的光。 < P>在C++部分中,该方法应该接受UIT8(等价于C字节)的平台数组。p> 根据“C++/CX还定义了uint8,相当于无符号字符,它在Windows运行时不受支持,并且不

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

在WinRT中,IVector被投影为IList,我不确定byte->unsigned char,但我怀疑也是

C#

C++

void SomeWinRTFunction(IVector字节)
{ 
IVector使用从管理的土地中给定的字节选择某物;
} 

这可能会有更多的光。

< P>在C++部分中,该方法应该接受UIT8(等价于C字节)的平台数组。p>
根据“C++/CX还定义了uint8,相当于无符号字符,它在Windows运行时不受支持,并且不能在公共API中使用”-因此我猜
uchar
会更“正确”?是的,但由于此API将被其他语言使用,因此您需要一个受支持的类型作为公共API(uint8)的一部分。我试图指出的另一点是,数组实际上是受支持的,因此除非您愿意,否则无需使用泛型集合。我不明白这一点:“……因为此API将被其他语言使用,所以您需要一个受支持的类型作为公共API(UInt8)的一部分。”-提供的链接说,
uint8
不能在公共API中使用,您说它在公共API中受支持。此外:“…我试图提出的另一点是,数组实际上是受支持的,因此不需要使用泛型集合,除非您想…”-这是一个很好的观点!哪个链接说uint8不能在公共API中使用?如果你看一下,你看到UIT8是支持的API(C++ + Cx)的一部分,而标准C++中的相应类型是无符号字符。我在答案中包含的代码在Win8 RC上成功运行。
byte[] array;
SomeWinRTFunction(array);
void SomeWinRTFunction(IVector<unsigned char> bytes) 
{ 
    IVector<unsigned char> something using the bytes given from managed land; 
} 
public ref class Class1 sealed
{
public:
    Class1();
    //readonly array
    void TestArray(const Platform::Array<uint8>^ intArray)
    {

    }
    //writeonly array
    void TestOutArray(Platform::WriteOnlyArray<uint8>^ intOutArray)
    {

    }

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

    }