HCL Notes / Domino / Diverses > Entwicklung
Single value in Variant Array in Dokument geschrieben --> Schrott in Dokument
(1/1)
Tode:
Bin grade über ein seltsames Phänomen gestolpert, das ich mir nicht wirklich erklären kann.
Hintergrund: Ich habe eine "generische" Funktion, um Dokumentwerte (vergleichbar) zu setzen. Im Dokument kommt aber nicht das an, was ich setze. Hier ein Auszug aus einem Agenten mit dem minimalen Code um das Problem zu reproduzieren:
--- Code: ---Dim ses as New NotesSession
Dim db as NotesDatabase
Dim doc as NotesDocument
Dim arrValue(0) As Variant
Dim s as Single
Set db = ses.CurrentDatabase
Set doc = db.UnprocessedDocuments.GetFirstDocument
s = 1
arrValue(0) = s
msgbox arrValue(0)
Call doc.ReplaceItemValue( "AAA" , arrValue )
msgbox doc.GetItemValue( "AAA" )(0)
--- Ende Code ---
Messagebox 1:
1
Messagebox 2:
5,26354424712089E-315
Kann sich das jemand erklären? Passiert da eine seltsame Type- Conversion beim schreiben eines Single in ein Variant- Array?
CarstenH:
--- Zitat von: Tode am 04.01.22 - 09:36:17 ---Passiert da eine seltsame Type- Conversion beim schreiben eines Single in ein Variant- Array?
--- Ende Zitat ---
Hab auch schon festgestellt, dass sich Variants (für mich) teils unvorhersehbar benehmen jenachdem ob man sie mit einem oder mehreren Werten befüllt. Im Notfall habe ich dann nacheinander in beide Richtungen konvertiert damit es stabil passte.
Carsten
Tode:
Witzigerweise: Ersetzt man Single mit Double, dann kommt der richtige Wert im Dokument an...
pantelis.botsas:
--- Zitat von: Tode am 04.01.22 - 09:36:17 ---Kann sich das jemand erklären? Passiert da eine seltsame Type- Conversion beim schreiben eines Single in ein Variant- Array?
--- Ende Zitat ---
Hallo Tode,
in Lotusscript werden Werte beim Datentyp Single als 4byte-Block angelegt.
Der Datentyp Variant wird jedoch als 8byte-Block angelegt.
Bei der Zuweisung eines Single-Typs zu einem Variant-Typ erfolgt eine Konvertierung von 4byte auf 8byte. Doch leider nicht so, wie man sich das erhofft, sondern - so wie ich es verstanden habe - linksbündig statt rechtsbündig im vorgegebenen Speicherblock.
https://help.hcltechsw.com/dom_designer/10.0.1/basic/LSAZ_VARIANT_DATA_TYPE.html
Da Double ebenfalls als 8byte-Block angelegt wird, geht bei der Zuweisung zu einem Variant nichts kaputt.
Tode:
Wow, danke für diese Hintegrundinformation.
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln