繁体   English   中英

如何在Windows Store应用程序中使用WinRT C ++中的“字节数组”获取结构数组?

[英]How to get the array of struct with “byte array” from WinRT C++ to C# in Windows Store app?

在这里,我有一个带有C ++ WinRT组件的C#metro app。 我需要在WinRT中做一些事情,比如分配照片的名称/路径,并检索照片的缩略图。

首先,我在WinRT C ++中编写一个值struct并检索struct array函数,如下所示。

public value struct Item
{
    String^ strName;
    String^ strPath;
};
public ref class CTestWinRT sealed
{
public:
    CTestWinRT();
    void TestOutStructArray(Platform::WriteOnlyArray<Item>^ intOutArray)
    {
        intOutArray->Data[0].strName = ref new String(L"test1.jpg");
        intOutArray->Data[0].strPath = ref new String(L"c:\\temp");
        intOutArray->Data[1].strName = ref new String(L"test2.jpg");
        intOutArray->Data[1].strPath = ref new String(L"c:\\temp");
    }
};

然后我在C#按钮中使用TestOutStructArray函数点击如下。

    CTestWinRT myNative = new CTestWinRT();
    private void btnTestClick(object sender, RoutedEventArgs e)
    {
        Item[] items = new Item[2];
        myNative.TestOutStructArray(items);
    }

该函数正常工作,items数组可以通过调试窗口查看值是否正确。

现在,我想在value struct中添加一个字节数组,如下所示。

public value struct Item
{
    String^ strName;
    String^ strPath;
    uint8 byteThumbnail[8096];
};

这将导致下面的编译器错误:

错误C3987:'byteThumbnail':公共成员的签名包含本机类型'unsigned char [8096]'

错误C3992:'byteThumbnail':公共成员的签名包含无效类型'unsigned char [8096]'

我查看关于value struct的MSDN,它说value struct不能有一个ref类或struct作为成员,所以我想我不能像上面那样编写代码。

http://msdn.microsoft.com/en-us/library/windows/apps/hh699861.aspx

有谁知道如何使用另一种方式来替换值struct? 我需要数组里面有“字节数组”。

可以跨ABI传递以下数组类型

  1. const Platform :: Array ^,
  2. 平台::阵列^ *
  3. 平台:: WriteOnlyArray,
  4. Platform :: Array ^的返回值。

值struct或value类只能包含基本数字类型,枚举类或Platform :: String ^作为字段。

因此,您不能将值结构与数组一起使用。 而且你不能使用uint8 []类型的数组。

您应该单独传递数组和结构,或使用ref类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM