Announcement

Collapse
No announcement yet.

InvokeEvent-Bug bei importierten VCL-Wrapperkomponenten

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

  • InvokeEvent-Bug bei importierten VCL-Wrapperkomponenten

    Ziel: COM-Automationsobjekt mit Events entwicklen, wobei das Event-Interface eine Interface-Methode mit mehreren Parametern nutzt
    <pre>
    IMultiParamD6TestObjEvents = dispinterface
    ['{370585E9-44A9-472C-95FD-C6632FBC9128}']
    procedure OnWork(const sMsg: WideString; iValue: Integer); dispid 1;
    end;
    </pre>
    Von diesem COM-Objekt wird über <i>Projekt | Typbibliothek importieren</i> eine VCL-Wrapperkomponente generiert.

    Ergebnis in <b>Delphi 5</b>: OK
    <pre>
    procedure TMultParamObj.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
    begin
    case DispID of
    -1: Exit; // DISPID_UNKNOWN
    1: if Assigned(FOnWork) then
    FOnWork(Self, Params[0] {const WideString}, Params[1] {Integer});
    end; {case DispID}
    end;
    </pre>
    Ergebnis in <b>Delphi 6.01</b>: <b> Parameter-Reihenfolge bei FOnWork ist falsch</b>
    <pre>
    procedure TMultiParamD6TestObj.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
    begin
    case DispID of
    -1: Exit; // DISPID_UNKNOWN
    1: if Assigned(FOnWork) then
    FOnWork(Self, Params[1] {Integer}, Params[0] {const WideString});
    end; {case DispID}
    end;
    </pre>
    Workaround: Die von Delphi automatisch generierte Import-Unit von Hand ändern.
Working...
X