Announcement

Collapse
No announcement yet.

Seltsames Verhalten D6(7) bei Variants/OleVariants

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Seltsames Verhalten D6(7) bei Variants/OleVariants

    Ich habe hier ein sehr komisches Verhalten von Delphi bezüglich Variants bei der Verwendung des Adobe SVG-Viewers.

    Ich habe mir das SVGActiveX 3.0 Typbibliothek importiert (mit Wrapper) und habe mit ein Control auf das Formular gelegt. Da nicht alle eigentlich verfügbaren Funktionen des Controls über die Typbibliothek bereitgestellt werden, muß man in vielen Bereichen über die späte Bindung arbeiten.

    Folgendes Beispiel soll das Problem verdeutlichen:

    <pre>
    var
    Doc: OleVariant;
    root: OleVariant;
    scale: Variant;
    begin
    Doc := SVGCtl.getSVGDocument; // SVGCtl ist meine Komponente auf dem Formular
    root := Doc.rootElement;

    scale := root.currentScale; // Bisherige Einstellung auslesen

    root.currentScale := '0.5'; // Funktioniert

    root.currentScale := scale; // Exception: Typmismatch???

    root.currentScale := VarAsType(scale, varSingle); // Funktioniert (Cast auf richtigen Typ)

    scale := VarAsType(scale, varSingle);
    root.currentScale := scale; // Funktioniert immer noch nicht, obwohl explizit mit VarAsType in richtigen Typ konvertiert wird
    end;
    </pre>

    Wieso ist der übergebene Wert unterschiedlich (falsch) wenn er über eine lokale Variable dem Objekt zugewiesen wird (hier scale), aber richtig wenn er über die Funktion VarAsType zugewiesen wird? Ähnliches gilt auch für alle anderen über die späte Bindung erreichbaren Funktionen.
    Ist dies ein Delphi-Problem oder hat hier Adobe eine "komische" Implementierung durchgeführt? Wenn jemand diese mit einer anderen Delphi-Version nachvollziehen könnte (bzw. mit C++/VB).
Working...
X