2009-02-27 6 views
6

Ich habe es mit einem WriteableBitmap in C# zu tun. Ich verwende derzeit einen unsicheren Codeblock, um direkt auf die Pixel über WriteableBitmap.BackBuffer zuzugreifen. Ich würde mich lieber nicht auf die Option /unsafe verlassen, sondern überlege stattdessen, stattdessen WriteableBitmap.WritePixels zu verwenden.Gibt es ein "Präprozessor" -Symbol, das dem/unsafe-Flag entspricht?

Gibt es eine Möglichkeit, in der "unsicheren" Version bedingt kompiliert zu werden, so dass es verwendet werden kann, wenn die/unsafe Option zur Kompilierung verwendet wurde, ohne dass eine manuelle Integration in meine Projektdatei erforderlich ist?

Kurz gesagt ich bin auf der Suche nach etwas entlang der Linien von:

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

Erkennung zur Laufzeit ist zu schön; aber das heißt, ich muss immer mit/unsafe kompilieren, und das bedeutet, dass der Bibliothekscode Projektdateiaktualisierungen erfordern würde, was weniger praktisch ist.

Grundsätzlich möchte ich die schnelle Version behalten, wenn es darauf ankommt, aber eine vernünftige Version haben, die einfach funktioniert, egal was.

Antwort

4

Ich empfehle Ihnen, eine oder mehrere neue Konfigurationen mit dem Konfigurationsmanager zu erstellen, sagen wir "Unsafe Debug" und "Unsafe Release", die die vorhandenen Optionen haben, plus Unsafe und ein bedingtes Symbol von UNSAFE hinzufügen. Anstatt die unsicheren Optionen zu aktivieren, würden Sie die unsichere Konfiguration verwenden.

Sie könnten auch die Konfigurationen haben, die den Ausgabenamen der unsicheren Assembly ändern, so dass Sie zwei Assemblys haben, Bitmaps.dll und Bitmaps.Unsafe.dll sagen, und ein Client der Assembly kann entscheiden, welche seine Bedürfnisse am besten erfüllt Geben Sie an, auf welche Baugruppe verwiesen wird.

+0

Dies (wie auch der Vorschlag des Konfigurators) sieht tatsächlich sehr machbar aus, danke! –

1

Ich würde vorschlagen, dass Sie mit /unsafe /define:SAFE kompilieren. Vielleicht gibt es eine andere Art, auf die ich nicht weiß.

0

Ich denke, man könnte diesen Code versuchen

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

Dann können Sie den Code verwenden, wie Sie in Ihrem Beispiel gab.

Verwandte Themen