Domino 9 und frühere Versionen > ND8: Entwicklung
LotusScript-Fehler
(1/1)
Jürgen Schomann:
ich habe folgenden LotusScript-Code
Dim FieldLong(1) As Long
Dim FieldVariant(1) As Variant
Dim ScalarVariant As Variant
FieldLong(0) = 1
FieldLong(1) = 2
FieldVariant(0) = "a"
FieldVariant(1) = FieldLong ' OK
ScalarVariant = FieldVariant ' Fehler Type mismatch
Einer Variant-Variablen können ja verschiedene Datentypen zugewiesen werden. Wenn in einem Feld von Typ Variant aber einem Element ein Feld zugewiesen wird, kann diese Variantvariable nicht weiteren Variantvariablen zugewiesen werden. Es kommt 'Type mismatch'.
Eigentlich sind die Zuweisungen intern doch nur Zeiger, so dass Adresse auf Adresse verweisen müsste oder?
koehlerbv:
Jürgen, Du hast da ein fixed Array und ein Variant. Und *das* ist Dein Problem.
Bernhard
Peter Klett:
--- Zitat von: Jürgen Schomann am 12.04.12 - 19:10:44 ---Eigentlich sind die Zuweisungen intern doch nur Zeiger, so dass Adresse auf Adresse verweisen müsste oder?
--- Ende Zitat ---
Nein, das können keine Zeiger sein. Dein Script etwas abgewandelt beweist es:
Dim FieldLong(1) As Long
Dim ScalarVariant As Variant
FieldLong(0) = 1
FieldLong(1) = 2
ScalarVariant = FieldLong
ScalarVariant (0) = 3
Print FieldLong (0) '-> 1
Print ScalarVariant (0) '-> 3
pram:
--- Zitat ---FieldVariant(1) = FieldLong
ScalarVariant = FieldVariant
--- Ende Zitat ---
FieldLong ist vom Typ "Array Of Long" und FieldVariant ist somit vom Typ "Array Of Array Of Long"
Wie Peter schon schrieb, werden Arrays kopiert, das geht aber nur, wenn das Array keine weiteren Arrays enthält
(Bei Listen ist es änlich)
Wenn du mit Zeigern arbeiten willst, so musst du mit Objekten arbeiten (welche das Array als Member haben)
Letzteres ist sowieso komfortabler, weil man ins Objekt Methoden wie Add etc einbauen kann
--- Code: ---Public Class ObjArray
private data() as Variant
private length as long ' Länge des Arrays (muss immer <= ubound(data) sein)
public sub add(toAdd)
'... sicherstellen, dass noch ausreichend Platz in Data ist, wenn nicht, dann vper redim vergrößern
' aber nicht nur um ein Element, sondern gleich um mehrere (wg. Performance)
data(length) = toAdd
length = length + 1
end sub
end class
--- Ende Code ---
Gruß
Roland
Jürgen Schomann:
Vielen Dank für eure Antworten. Haben mir fürs Verständnis sehr geholfen.
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln