Autor Thema: Single value in Variant Array in Dokument geschrieben --> Schrott in Dokument  (Gelesen 1856 mal)

Offline Tode

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
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?
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline CarstenH

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 668
  • Geschlecht: Männlich
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

Offline Tode

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Witzigerweise: Ersetzt man Single mit Double, dann kommt der richtige Wert im Dokument an...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

pantelis.botsas

  • Gast
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

Da Double ebenfalls als 8byte-Block angelegt wird, geht bei der Zuweisung zu einem Variant nichts kaputt.
« Letzte Änderung: 16.01.22 - 02:38:27 von pantelis.botsas »

Offline Tode

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Wow, danke für diese Hintegrundinformation.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz