NumPut

Speichert eine oder mehrere Zahlen im Binärformat an einer bestimmten Adresse+Offset.

NumPut Typ, Zahl, Typ2, Zahl2, ... Ziel , Offset

Parameter

Typ

Typ: Zeichenkette

Eine der folgenden Zeichenketten: UInt, UInt64, Int, Int64, Short, UShort, Char, UChar, Double, Float, Ptr oder UPtr

Bei allen Integertypen oder bei der Übergabe von reinen Integern wird das Ergebnis nicht durch vorzeichenfähig vs. vorzeichenlos beeinflusst, da für die Darstellung von vorzeichenfähigen Integern das Zweierkomplement verwendet wird.

Weitere Informationen finden Sie unter DllCall-Typen.

Zahl

Typ: Integer

Die zu speichernde Zahl.

Ziel

Typ: Objekt oder Integer

Ein Buffer-ähnliches Objekt oder eine Speicheradresse.

Es kann ein beliebiges Objekt mit einer Ptr- und Size-Eigenschaft verwendet werden, aber diese Funktion ist für das native Buffer-Objekt optimiert. Die Übergabe eines Objekts mit diesen Eigenschaften stellt sicher, dass die Funktion nicht in einen ungültigen Speicherbereich schreibt, was zu Abstürzen oder anderem unvorhersehbaren Verhalten führen kann.

Offset

Typ: Integer

Wenn weggelassen, wird standardmäßig 0 verwendet. Andernfalls geben Sie eine Zahl (in Bytes) an, die zum Ziel addiert wird, um die Zieladresse zu bestimmen.

Rückgabewert

Typ: Integer

Diese Funktion gibt die Adresse ganz rechts vom zuletzt geschriebenen Element zurück. Dieser Rückgabewert kann verwendet werden, wenn eine nicht zusammenhängende Zahlenfolge geschrieben wird, z.B. in einer Struktur für DllCall, bei der einige Felder nicht gesetzt sind. In vielen Fällen ist es jedoch einfacher und effizienter, stattdessen mehrere Typ-Nummer-Paare anzugeben. Die Übergabe der Adresse zurück an NumPut ist weniger sicher als die Übergabe eines Buffer-ähnlichen Objekts mit einem aktualisierten Offset.

Allgemeine Bemerkungen

Eine Zahlenfolge kann geschrieben werden, indem Typ und Nummer nach der ersten Nummer beliebig oft wiederholt werden. Jede Zahl wird auf das nächste Byte nach der vorherigen Zahl geschrieben, ohne Padding. Bei der Erstellung einer Struktur für DllCall ist zu beachten, dass einige Felder aufgrund von Anforderungen bzgl. Datenausrichtung ein explizites Padding benötigen.

Wenn ein Integer den Wertebereich von Typ überschreitet, werden seine höchstwertigen Bytes ignoriert; z.B. würde NumPut("Char", 257, buf) nur die Zahl 1 speichern.

Es kann eine Ausnahme ausgelöst werden, wenn die Zieladresse ungültig ist. Es ist jedoch möglich, dass einige ungültige Adressen nicht als solche erkannt werden, was zu unvorhersehbarem Verhalten führen kann. Die Übergabe eines Buffer-Objekts anstelle einer Adresse stellt sicher, dass die Zieladresse immer validiert werden kann.

NumGet, DllCall, Buffer-Objekt, VarSetStrCapacity