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 )