gpt4 book ai didi

c# - 如何在 Windows 应用商店应用程序中从 WinRT C++ 获取带有 "byte array"的结构数组到 C#?

转载 作者:太空狗 更新时间:2023-10-29 21:40:15 24 4
gpt4 key购买 nike

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

首先,我在 WinRT C++ 中编写了一个值结构和检索结构数组函数,如下所示。

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 数组可以通过调试窗口看到值是正确的。

现在,我想在值结构中添加一个字节数组,如下所示。

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

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

error C3987: 'byteThumbnail': signature of public member contains native type 'unsigned char [8096]'

error C3992: 'byteThumbnail': signature of public member contains invalid type 'unsigned char [8096]'

我查看了关于值结构的 MSDN,它说值结构不能有 ref 类或结构作为成员,所以我认为我不能像上面那样编写代码。

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

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

最佳答案

以下array types可以跨 ABI 传递:

  1. 常量平台::数组^,
  2. 平台::数组^*,
  3. 平台::WriteOnlyArray,
  4. Platform::Array^ 的返回值。

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

所以你不能对数组使用值结构。并且您不能使用 uint8[] 类型的数组。

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

关于c# - 如何在 Windows 应用商店应用程序中从 WinRT C++ 获取带有 "byte array"的结构数组到 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14584952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com