Behandlung spezieller COM-Typen in JavaScript
Variants
Die COM-Methoden werden per IDispatch::Invoke
aufgerufen. Die Eingabeparameter und die Ausgabeparameter werden als VARIANT
übertragen.
Auch Eingabe-/Ausgabe-Objekte des Skripts werden als VARIANT
übergeben.
Ein VARIANT
muss in eine JS-Variable konvertiert werden, und aus einer JS-Variable muss ein VARIANT
erstellt werden.
Folgende VT_xx
Typen werden unterstützt (im wesentlichen alle außer VT_RECORD
)
| JS Typ |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VARIANT
mit dem Flag VT_ARRAY
wird als JS-Array (typed oder klassisch) dargestellt.
Arrays
Ein VARIANT
kann einen Flag VT_ARRAY
haben (dann ist der Inhalt vom VARIANT
ein SAFEARRAY
). In diesem Fall wird ein JS-Array erstellt.
Andererseits wird ein JS-Array nach VARIANT
mit Flag VT_ARRAY
konvertiert (dann wird der Inhalt von VARIANT
ein SAFEARRAY
).
SAFEARRAY
→ JS-Array
Der Typ von SAFEARRAY
-Elementen gibt vor, welcher JS-Array erstellt wird:
vt von | JS-Array-Typ |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
JS-Array → SAFEARRAY
Der Typ von SAFEARRAY
-Elementen wird je nach JS-Array-Typ ermittelt:
JS-Array-Typ | vt von |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Numbers
VARIANT
→ JS-Number
JS implementiert die Numbers
als IEEE-754 double precision numbers. Integerwerte +/-9007199254740991 sind sogenannte Safe Integers, also maximale Integers, die bei IEEE-754 korrekte Integer-Semantik haben.
vt | Literal in c++ | JS-Number (toString) |
---|---|---|
| -128 | -128 |
| -127 | -127 |
| -1 | -1 |
| 0 | 0 |
| 1 | 1 |
| 127 | 127 |
| 0 | 0 |
| 1 | 1 |
| 127 | 127 |
| 128 | 128 |
| 129 | 129 |
| 255 | 255 |
| -32768 | -32768 |
| -32767 | -32767 |
| -1 | -1 |
| 0 | 0 |
| 1 | 1 |
| 32767 | 32767 |
| 0 | 0 |
| 1 | 1 |
| 32767 | 32767 |
| 32768 | 32768 |
| 65535 | 65535 |
| -2147483647i32 - 1 | -2147483648 |
| -2147483647i32 | -2147483647 |
| -1 | -1 |
| 0 | 0 |
| 1 | 1 |
| 2147483647 | 2147483647 |
| 0 | 0 |
| 1 | 1 |
| 2147483647 | 2147483647 |
| 2147483648 | 2147483648 |
| 4294967295 | 4294967295 |
| -2147483647i32 - 1 | -2147483648 |
| -2147483647i32 | -2147483647 |
| -1 | -1 |
| 0 | 0 |
| 1 | 1 |
| 2147483647 | 2147483647 |
| 0 | 0 |
| 1 | 1 |
| 2147483647 | 2147483647 |
| 2147483648 | 2147483648 |
| 4294967295 | 4294967295 |
| -9223372036854775807LL - 1 | -9223372036854776000 |
| -9007199254740993LL | -9007199254740992 |
| -9007199254740992LL | -9007199254740992 |
| -9007199254740991LL | -9007199254740991 |
| -9007199254740990LL | -9007199254740990 |
| -9007199254740989LL | -9007199254740989 |
| -2147483649LL | -2147483649 |
| -2147483648LL | -2147483648 |
| -2147483647LL | -2147483647 |
| -1 | -1 |
| 0 | 0 |
| 1 | 1 |
| 2147483647LL | 2147483647 |
| 2147483648LL | 2147483648 |
| 4294967295LL | 4294967295 |
| 4294967296LL | 4294967296 |
| 9007199254740989LL | 9007199254740989 |
| 9007199254740990LL | 9007199254740990 |
| 9007199254740991LL | 9007199254740991 |
| 9007199254740992LL | 9007199254740992 |
| 9007199254740993LL | 9007199254740992 |
| 9223372036854775807LL | 9223372036854776000 |
| 0 | 0 |
| 1 | 1 |
| 2147483647LL | 2147483647 |
| 2147483648LL | 2147483648 |
| 4294967295LL | 4294967295 |
| 4294967296LL | 4294967296 |
| 9007199254740989LL | 9007199254740989 |
| 9007199254740990LL | 9007199254740990 |
| 9007199254740991LL | 9007199254740991 |
| 9007199254740992LL | 9007199254740992 |
| 9007199254740993LL | 9007199254740992 |
| 9223372036854775807LL | 9223372036854776000 |
| 9223372036854775808ULL | 9223372036854776000 |
| 18446744073709551615ULL | 18446744073709552000 |
| -1222333444555.0f | -1222333431808 |
| -1222333444.0f | -1222333440 |
| -1222333.0f | -1222333 |
| -1222.0f | -1222 |
| 0,0f | 0 |
| 1222.0f | 1222 |
| 1222333.0f | 1222333 |
| 1222333444.0f | 1222333440 |
| 1222333444555.0f | 1222333431808 |
| 1.0e+33f | 9.999999944957273e+32 |
| 1.0e-33f | 1.000000023742228e-33 |
| -1222333444555666777888.0 | -1.222333444555667e+21 |
| -1222333444555666777.0 | -1222333444555666700 |
| -1222333444555666.0 | -1222333444555666 |
| -1222333444555.0 | -1222333444555 |
| -1222333444.0 | -1222333444 |
| -1222333.0 | -1222333 |
| -1222.0 | -1222 |
| 0,0 | 0 |
| 1222.0 | 1222 |
| 1222333.0 | 1222333 |
| 1222333444.0 | 1222333444 |
| 1222333444555.0 | 1222333444555 |
| 1222333444555666.0 | 1222333444555666 |
| 1222333444555666777.0 | 1222333444555666700 |
| 1222333444555666777888.0 |