Announcement

Collapse
No announcement yet.

IUnknown als IDispatch ?

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

  • IUnknown als IDispatch ?

    Hallo,

    ich habe folgendes Problem :

    Der Com-Server fragt über eine Methode diverse Zuweisungen aus
    einem Automatisierungsobjekt ab.
    Er liefert den zu selektierenden 'Customer', sowie das SafeArray.
    Das SafeArray kann vom Typ Variant-Array of IDispatch oder IUnknown sein.

    Als IDispatch beinhaltet es das Interface 'IDataSessions'.
    Allerdings ist dies nicht der Fall, sonders erfolgt als
    Variant-Array of IUnknown.

    Jetzt zu Frage:
    Muss das Variant-Array of IUnknown erst in ein va of IDataSessions
    konvertiert werden ?

    procedure TCusData.GetDataSessions(lCustomerID: Integer;
    saDataSessions: OleVariant);
    begin
    end;

    besten Dank,
    Jürgen

  • #2
    Hallo,

    alle COM-Interfaces stammen von IUnknown ab, so dass ein vorliegender IUnknown-Interfacezeiger direkt in das spezielle Interface umgetauscht werden kann (wenn sich das COM-Objekt an die Regeln hält). Das Interface IDispatch stammt somit von IUnknown ab, und wenn IDataSessions ein Dual Interface ist, erbt es beide Elternteile. Das Umtauschen könnte so aussehen, wobei Delphi hinter den Kulissen bei der AS-Typumwandlung automatisch IUnknown.QueryInterface aufruft:
    <pre>
    var
    aDS : IDataSessions;
    begin
    aDS := IUnknown(saDataSessions) as IDataSessions;
    // oder
    aDS := IDispatch(saDataSessions) as IDataSessions;
    </pre>
    Wenn sich hinter saDataSessions jedoch ein Safe Array bestehend aus Interface-Zeigern verbirgt, muss das einzelne Element vorher dort ausgepackt werden - erst dann wird das Umtauschen des Interfacezeigers funktionieren

    Comment

    Working...
    X