在这里,我有一个带有 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);
}
该功能工作正常,项目数组可以通过调试窗口看到值是正确的。
现在,我想在值结构中添加一个字节数组,如下所示。
public value struct Item
{
String^ strName;
String^ strPath;
uint8 byteThumbnail[8096];
};
这将导致以下编译器错误:
错误 C3987:“byteThumbnail”:公共成员的签名包含本机类型“无符号字符 [8096]”
错误 C3992:“byteThumbnail”:公共成员的签名包含无效类型“无符号字符 [8096]”
我查看了有关 value struct 的 MSDN,它说 value struct 不能有 ref 类或 struct 作为成员,所以我想我不能像上面那样编写代码。
http://msdn.microsoft.com/en-us/library/windows/apps/hh699861.aspx
有谁知道如何使用另一种方式来替换值结构?我需要数组里面有“字节数组”。