c# windows-runtime c++-cx winprt

¿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:

  1. const Platform :: Array ^,
  2. Plataforma :: Array ^ *,
  3. Plataforma :: WriteOnlyArray,
  4. 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.