Frage

einen separaten Helfer Anordnung mit nur P / Invoke Erklärungen für ältere 3rd-Party-Komponenten enthält, frage ich mich, welche dieser beiden Möglichkeiten ist die bessere One ™, wenn die Montage CLS markiert werden müssen konform:

  • Verwenden Sie Int32 in einer Öffentlichkeit P / Invoke Erklärung, wo die nicht verwaltete Deklaration unsigned int hat.
  • Verwenden Sie UInt32 in einer internen P / Invoke Erklärung, wo die nicht verwaltete Deklaration unsigned int hat, und wickeln Sie es in einer Öffentlichkeit Methode, die ein Int32 und wandelt sie in UInt32 nimmt, wenn interne Methode aufrufen.

Was sind die vor- und Nachteile davon?

War es hilfreich?

Lösung

Der P / Invoke Einweiser wird nicht beschweren, wenn die uint zu groß werden, werden Sie nur mit einem negativen int enden. Die zusätzliche Schicht ermöglicht es Ihnen, die verwenden aktiviert Stichwort ein Overflow zu erzeugen. Das ist ziemlich wünschenswert.

Ob es sich lohnt die Mühe ist eine sekundäre Frage. Viele APIs, wie Win32, verwenden unsigned als logische Einschränkung. Wie die Länge der Zeichenfolge oder der Größe eines Speicherblocks, kann es nie negativ sein. In der Praxis ist eine solche Zahl kann nie überlaufen. Da es nicht möglich ist, dass viel Speicher zuzuweisen. Ich kann mich nicht erinnern, einmal in einem API läuft, wo es ein Slam-Dunk war, dass uint verwendet werden soll. Als solche, ich glaube, du bist gut mit ints nur eine gerade pinvoke Erklärung mit.

Andere Tipps

Ich glaube nicht, dass Sie die richtige Verhalten erhalten würden, wenn Sie mit der Option gehen 1. Int32 nur so hoch wie 2147483647 gehen kann. Während die unsigned int geht bis 4.294.967.295 auf. Solange Sie Sie alle Werte über 2 Milliarden müssen nicht wissen, tut es nicht wirklich wichtig. Aber um technisch korrekt, sollte die öffentliche Schnittstelle einen größeren Typ aussetzen und führen die Überprüfung der Grenzen sicherzustellen, dass es in einem unsigned int passt und eine Ausnahme auslösen, wenn es nicht der Fall ist. Ein Int64 tun (9,223,372,036,854,775,807).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top