Das Notes Forum

HCL Notes / Domino / Diverses => Entwicklung => Thema gestartet von: Tode am 04.01.22 - 09:36:17

Titel: Single value in Variant Array in Dokument geschrieben --> Schrott in Dokument
Beitrag von: Tode am 04.01.22 - 09:36:17
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)

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?
Titel: Re: Single value in Variant Array in Dokument geschrieben --> Schrott in Dokument
Beitrag von: CarstenH am 04.01.22 - 09:52:51
Passiert da eine seltsame Type- Conversion beim schreiben eines Single in ein Variant- Array?

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
Titel: Re: Single value in Variant Array in Dokument geschrieben --> Schrott in Dokument
Beitrag von: Tode am 04.01.22 - 10:11:28
Witzigerweise: Ersetzt man Single mit Double, dann kommt der richtige Wert im Dokument an...
Titel: Re: Single value in Variant Array in Dokument geschrieben --> Schrott in Dokument
Beitrag von: pantelis.botsas am 13.01.22 - 17:06:03
Kann sich das jemand erklären? Passiert da eine seltsame Type- Conversion beim schreiben eines Single in ein Variant- Array?

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 (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.
Titel: Re: Single value in Variant Array in Dokument geschrieben --> Schrott in Dokument
Beitrag von: Tode am 14.01.22 - 08:15:19
Wow, danke für diese Hintegrundinformation.