6

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

这种问题对于搜索引擎来说似乎还是太新了......

4

2 回答 2

6

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

    }
于 2012-06-11T18:39:16.267 回答
2

在 WinRT IVector 中被投影为 IList,我不确定 byte -> 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; 
} 

白皮书可能会提供更多信息。

于 2012-06-08T12:44:54.200 回答