2009-02-27 11 views
6

Estoy tratando con un WriteableBitmap en C#. Actualmente estoy usando un bloque de código inseguro para acceder directamente a los píxeles a través del WriteableBitmap.BackBuffer. Preferiría no depender de la opción /unsafe, sin embargo, entonces estoy considerando usar WriteableBitmap.WritePixels.¿Hay un símbolo de "preprocesador" correspondiente a la bandera/inseguro?

¿Hay alguna manera de compilar condicionalmente en la versión "insegura" de modo que se pueda usar cuando se utilizó la opción/insegura para la compilación, sin requerir la integración manual en mi archivo de proyecto?

En resumen estoy buscando algo en la línea de:

#if UNSAFE 
    //my unsafe version 
#else 
    //the supposedly safe version goes here 
#endif 

detección en tiempo de ejecución también es muy bueno; pero eso significa que siempre tengo que compilar con/unsafe, y eso significa que el código de la biblioteca requerirá actualizaciones de archivos del proyecto, que es menos útil.

Básicamente, quiero mantener la versión rápida para cuando importa, pero tengo una versión razonable que funciona sin importar nada.

Respuesta

4

Te recomiendo que crees una o más configuraciones nuevas usando el administrador de configuración, di "Eliminación insegura" y "Versión no segura", que tienen las opciones existentes más check inseguro y agrega un símbolo condicional de SEGURO. En lugar de alternar las opciones Inseguras, usaría la configuración Insegura.

También podría hacer que las configuraciones cambien el nombre de salida del ensamblaje inseguro para que tenga dos ensamblajes, por ejemplo Bitmaps.dll y Bitmaps.Unsafe.dll, y un cliente del ensamblado puede decidir cuál se ajusta mejor a sus necesidades mediante especificando a qué ensamblaje hace referencia.

+0

Esto (al igual que la sugerencia del configurador) parece bastante factible, ¡gracias! –

1

Le sugiero que compile con /unsafe /define:SAFE. Tal vez hay otra forma en la que no estoy al tanto.

0

creo que podría probar este código

#define UNSAFE 
#undef UNSAFE // comment this line out if you want to compile the save version 

A continuación, puede utilizar el código como usted dio en su ejemplo.

Cuestiones relacionadas