Einzelnen Beitrag anzeigen

fedcba

Registriert seit: 6. Aug 2013
6 Beiträge
 
#6

AW: Interface-Events aus Typbibliothek zum Laufen bringen

  Alt 7. Aug 2013, 10:06
Hallo,

Delphi-Quellcode:
IS7ProSimEvents = interface(IUnknown)
    ['{********-****-****-****-************}']
    function ScanFinished(ScanInfo: OleVariant): HResult; stdcall;
    function ConnectionError(const ControlEngine: WideString; Error: Integer): HResult; stdcall;
    function PLCSimStateChanged(const NewState: WideString): HResult; stdcall;
    function PauseStateChanged(const NewState: WideString): HResult; stdcall;
    function ScanModeChanged(const NewState: WideString): HResult; stdcall;
  end;
Ich habe versucht, mit dem EventSinkImp daraus was zu erstellen und erhalte eine veränderte S7PROSIMLib_TLB.pas und eine S7PROSIMLibEvents.pas. Die verwende ich im Programm (uses ...).
So. Jetzt habe ich in der Events.pas:

Delphi-Quellcode:
//SinkEventsForwards//
  TIS7ProSimEventsPLCSimStateChangedEvent = function (Sender: TObject; const NewState: WideString): HResult of object;

...

TS7PROSIMLibIS7ProSimEvents = class (TS7PROSIMLibEventsBaseSink
    , IS7ProSimEvents
  )
protected
    function IS7ProSimEvents.PLCSimStateChanged = DoPLCSimStateChanged;
...
protected
    //SinkInterface//
    DoPLCSimStateChanged(const NewState: WideString): HResult; stdcall;
...
protected
    //SinkEventsProtected//
    FPLCSimStateChanged: TIS7ProSimEventsPLCSimStateChangedEvent;
...
published
    //SinkEventsPublished//
    property PLCSimStateChanged: TIS7ProSimEventsPLCSimStateChangedEvent read FPLCSimStateChanged write FPLCSimStateChanged;

...

implementation

...

function TS7PROSIMLibIS7ProSimEvents.DoPLCSimStateChanged(const NewState: WideString): HResult;
begin
  Result := S_OK;
  if not Assigned (PLCSimStateChanged) then System.Exit;
  Result := PLCSimStateChanged (Self, NewState);
end;
und das Event, ebenso wie die anderen, möchte ich jetzt im Hauptprogramm haben...

Ich habe so etwas probiert:

S7ProSimPLCSimStateChanged := S7PROSIMLibEvents.TIS7ProSimEventsPLCSimStateChangedEvent;
Delphi-Quellcode:
procedure TMainForm.S7ProSimPLCSimStateChanged(Sender: TObject;const NewState: WideString);
begin
  ...
end;
Funktioniert irgendwie nicht:
E2035 Nicht genügend wirkliche Parameter

Was mache ich falsch?

Geändert von fedcba ( 7. Aug 2013 um 10:14 Uhr) Grund: Fehlermeldung hinzugefügt
  Mit Zitat antworten Zitat