如何最好地从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使用从管理的土地中给定的字节选择某物; }
对于搜索引擎来说,这类问题似乎太新了……在WinRT中,IVector被投影为IList,我不确定byte->unsigned char,但我怀疑也是 C# C++如何最好地从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运行时不受支持,并且不
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);
}