Announcement

Collapse
No announcement yet.

Events externer COM-Klassen behandeln

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

  • Events externer COM-Klassen behandeln

    Hallo,

    ich habe eine Typbiblitothek importiert deren Klasse TClientLineMgr das Event OnDispOnLineMgrNotification veröffentlicht. Mit einer Kleinen Anwendung ist es auch kein Thema auf das Event zu reagieren.

    <PRE>
    procedure TCLMgrTest.AClientLineMgrDispOnLineMgrNotification (
    Sender: TObject; msg, param: Integer);
    begin
    if ( msg = 0 ) then
    ShowMessage ('State of a line has changed.');
    end;
    </PRE>

    Jetzt möchte ich gerne mit einem COM-Objekt (In-process Server) das Event auswerten und in bestimmten Fällen in einer Fremdapplikation, ebenfalls über COM, weitere Arbeitsschritte einleiten.

    Wichtig ist für mich in erster Linie wie ich, für einen User unsichtbar, das Event mitbekomme. Ich würde es gerne mit einem COM-Objekt lösen, kann mir aber leider nicht weiterhelfen.

    Wie kann ich es realisieren?

  • #2
    Hallo,

    ja - diese Aufgabe ist lösbar. Das folgende Beispiel demonstriert, wie ein COM+ Objekt (In-Process-Server als DLL) die Events des nativen Connection-Objekts von ADO auswertet:
    <pre>
    var
    aCon : _Connection;
    aICPC : IConnectionPointContainer;
    begin
    aCon := CoConnection.Create;
    aCon.CursorLocation := adUseClient;
    // Connection Point aktivieren
    OleCheck(aCon.QueryInterface(IConnectionPointConta iner, aICPC));
    OleCheck(aICPC.FindConnectionPoint(DIID_Connection Events,FICP));
    // Treffer ?
    if(FICP <> nil) then
    OleCheck(FICP.Advise(Self, FConnEventsID));
    aCon.Open(cCS, '', '', adConnectUnspecified);
    ....
    aCon.Close;
    // eventuell aktiven Connection Point deaktivieren
    if(FICP <> nil) then FICP.Unadvise(FConnEventsID);
    FICP := nil;
    aCon := nil;
    end;
    </pre>
    Die Aufgabe besteht dabei nur darin, ein Sink-Objekt (COM-Objekt) zu schreiben, dass die Interface-Methoden des Events implementiert. Am einfachsten wird das sein, wenn dazu das FreeWare-Tool <b>EventSinkImp.exe</b> (<i>Delphi Event Sink Generator - Developed by Binh Ly http://www.techvanguards.com</i>) verwendet wird. Das Tool ist u.a. auch auf der CDROM zu meinem COM/DCOM/COM+-Buch zu finden.

    Das vollständige Beispielprojekt für das Auswerten der Connection-Events ist auf der CDROM meines neuen Buchs "ADO und Delphi" zu finden. Dort habe ich das Sink-Objekt von Hand geschrieben

    Comment

    Working...
    X