¿Cómo obtener la matriz de struct con "matriz de bytes" de WinRT C++ a C#en la aplicación Windows Store?
windows-runtime c++-cx (1)
Aquí tengo una aplicación de metro C # con un componente C ++ WinRT. Necesito hacer algo en WinRT, como asignar el nombre / ruta de una foto y recuperar la miniatura de la foto.
Primero, escribo una estructura de estructura de valor y recuperación struct en WinRT C ++ como a continuación.
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");
}
};
Luego utilizo la función TestOutStructArray en el botón C #, haga clic en siguiente.
CTestWinRT myNative = new CTestWinRT();
private void btnTestClick(object sender, RoutedEventArgs e)
{
Item[] items = new Item[2];
myNative.TestOutStructArray(items);
}
La función funciona bien y la matriz de elementos puede ver que los valores son correctos por la ventana de depuración.
Ahora, quiero agregar una matriz de bytes en value struct como se muestra a continuación.
public value struct Item
{
String^ strName;
String^ strPath;
uint8 byteThumbnail[8096];
};
Esto causará el error del compilador a continuación:
error C3987: ''byteThumbnail'': la firma del miembro público contiene el tipo nativo ''unsigned char [8096]''
error C3992: ''byteThumbnail'': la firma del miembro público contiene un tipo inválido ''unsigned char [8096]''
Busco en MSDN sobre value struct, dijo que value struct no puede tener una clase de referencia o estructura como miembro, por lo que creo que no puedo escribir el código como se indica anteriormente.
http://msdn.microsoft.com/en-us/library/windows/apps/hh699861.aspx
¿Alguien sabe cómo usar otra forma de reemplazar la estructura de valor? Necesito la matriz para tener "matriz de bytes" dentro.
Los siguientes tipos de matriz se pueden pasar a través de ABI:
- const Platform :: Array ^,
- Plataforma :: Array ^ *,
- Plataforma :: WriteOnlyArray,
- valor de retorno de Platform :: Array ^.
Una estructura de valor o clase de valor puede contener como campos solo tipos numéricos fundamentales, clases enum o Platform :: String ^.
Entonces no puedes usar una estructura de valor con matrices. Y no puede usar matrices del tipo uint8 [].
Debe pasar matrices y estructuras por separado o mediante el uso de una clase de referencia.