c# windows-phone-8 unsafe c++-cx

Código inseguro de Windows Phone 8(WP8) C#



windows-phone-8 unsafe (2)

EDITAR: Puede usar código inseguro ... solo tiene que editar manualmente el archivo proj.

¿Por qué o por qué C # en WP8 no es compatible con código inseguro cuando puedo usar código nativo de C ++ en el teléfono (no esperaba esto)? Quiero decir, vamos, estoy tan decepcionado con lo que Microsoft está tratando de forzar a C #.

¿Hay algún plan de MS para apoyar esto en el futuro en WP8? Paso las constantes de sombreado de C # a C ++ y uso un código inseguro para optimizar este proceso, pero en WP8 me veré obligado a hacerlo de una manera lenta en un dispositivo WAY slower en comparación con una PC y esto lo hace muy frustrante.

Como un ejemplo para pasar un vector4 a C ++ lo haría:

public unsafe void Set(Vector4 value) { com.Set((int)&value, sizeof(Vector4)); }

Luego en C ++:

void ShaderVariableCom::Set(__int32 data, int size) { void* ptr = (void*)data; if (vertexOffset != -1) memcpy(vertexBytes + vertexOffset, ptr, size); if (pixelOffset != -1) memcpy(pixelBytes + pixelOffset, ptr, size); }

¿Alguien tiene una buena forma rápida de hacer esto sin un código inseguro?


Encontré una solución.

Para tipos de vectores simples simplemente hazlo:

Marshal.StructureToPtr(vector, nativePtr, false);

Y para matrices, haga lo siguiente:

var data = new Vector[10]; int size = Marshal.SizeOf(data[0]); for (int i = 0; i != data.Length; ++i) { Marshal.StructureToPtr(data[i], nativePtr + (size * i), false); }

Si alguien tiene una respuesta mejor, sería bueno saberlo también.


Esto es exactamente lo que C ++ / CX está ahí para abordar (mientras se mantiene la integridad del sandbox).

Por ejemplo, para pasar una matriz int de C # a C ++ use Platform::Array<int> en su clase de referencia C ++ / CX o definición de interfaz. Consulte MSDN para obtener información específica sobre cómo usar este tipo.

( http://msdn.microsoft.com/en-us/library/windows/apps/hh700131.aspx )