Announcement

Collapse
No announcement yet.

COM-Frage

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

  • COM-Frage

    Hallo,

    Ich bin gerade dabei, meinen eigenen Script Host zu schreiben.
    So weit, so gut (oder eher nicht).
    Im Moment bin ich dabei, die Attribute eines in die Scripting-Engine
    geladenen (und geparsten) Scripts zu ermitteln.
    Ich gehe dabei folgendermassen vor:
    - Ermitteln der Dispatch-Schnittstelle der Engine mit
    IActiveScript::GetScriptDispatch().
    - Typinformationen ermitteln mit IDispatch::GetTypeInfo().
    - Auf der ITypeInfo-Schnittstelle GetTypeAttr() aufrufen.
    - Anhand der von GetTypeAttr() gefüllten TYPEATTR-Struktur über die
    Funktionen und Variablen iterieren (GetFuncDesc(), bzw. GetVarDesc()).
    Bis hierher geht auch alles gut, aber jetzt kommt der Haken.
    Die in den jeweiligen Strukturen FUNCDESC, bzw. VARDESC zurückgelieferten
    Informationen sind lediglich rudimentärer Natur. Für Funktionen bekomme
    nur den Rückgabe-Typ und die Anzahl der Parameter. Bei den Parametern
    (PARAMDESC) bekomme ich nur den Datentyp des Parameters. Ich bekomme weder
    Informationen darüber, ob es sich bei dem Parameter um ein Array handelt,
    ob er BYREF oder BYVAL übergeben wird, noch ob er einen Default-Wert hat.
    Alle diese Daten sind in den jeweiligen Strukturen vorgesehen, sind
    aber NULL, bzw. 0!!!!!
    Bei den Variablen verhält es sich genauso.
    Wie komme ich an vollständige Typinformationen???????
    Ich habe diesen Text bereits in diversen Newsgroups gepostet,
    jedoch ohne Erfolg!

    MfG

    Reiner Ziegler
    [email protected]

  • #2
    Hallo,

    >Ich bin gerade dabei, meinen eigenen Script Host zu schreiben...

    wozu soll das gut sein? Das von Microsoft frei verfügbare Script Control kann doch problemlos in die eigene Delphi-Anwendung integriert werden, um VBScript und JScript nutzen zu können:
    <pre>
    { Fall b) VBScript-Funktion mit 2 Parameter aufrufen

    function OSMWSt (Netto,SteuerSatz)
    Dim vSt
    vSt = 1 + (SteuerSatz / 100)
    OSMWSt = Netto * vSt
    end function
    }

    procedure TForm1.ButtonCalcClick(Sender: TObject);
    var
    Params : PSafeArray;
    v : Variant;
    begin
    with ScriptControl1 do
    begin
    Language := 'VBScript';
    SitehWnd := Handle;
    AddCode(Memo1.Lines.Text);
    end;
    v := VarArrayCreate([0, 1], varVariant);
    v[0] := EditNetto.Text;
    v[1] := '16';
    Params := PSafeArray(TVarData(v).VArray);
    StaticTextBrutto.Caption := ScriptControl1.Run('OSMWSt', Params);
    ScriptControl1.Reset;
    end;
    </pre&gt

    Comment

    Working...
    X