Announcement

Collapse
No announcement yet.

COM-Server-Event überschreiben

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

  • COM-Server-Event überschreiben

    Hallo,
    ich habe einen NT/2000-Dienst mit Delphi geschrieben, der mir über die Kopplung TCPSocket <-> COM-Server die Möglichkeit bieten soll zwischen einer JavaApplikation und einem (Windows-)ERP-System XML-Dokumente auszutauschen. Der Weg von der JavaApp. zu dem ERP-System funktioniert auch soweit sehr gut. Der COM-Server wurde von den Entwicklern des ERP-Systems geschrieben und ist aus dem ERP-System heraus dementsprechend einfach zu bedienen. Er bietet ein Event "OnMessageReceived", welches - wie der Name schon sagt - beim Empfang einer Nachricht ausgelöst wird. In meinem Dienst (in dem ich den Server mit CreateOleObject instanziert habe) muss ich dieses Ereignis nun abfangen um die Nachricht über einen ClientSocket an Java weiterzuleiten. Jetzt die Frage: kann man grundsätzlich Ereignisse von COM-Servern durch überschreiben (oder andere Methoden) umlenken und abfangen? Und wenn ja wie? Bin für jede Hilfe dankbar!!!

    Gruß
    Christian

  • #2
    Hi Christian,

    ich nehme mal an, entweder hast du das gleiche Problem wie ich (s. ConnectionPoints, keine Parameterrückgabe möglich ?) oder du hast den Komponenten Wrapper noch nicht eingesetzt. Wenn du nur die Nachrichten verarbeiten möchtest, also alle Parameter nur in deinen Client (Dienst) reingehen, kannst du den Wrapper von Delphi selber benutzen. Einfach beim Objekt/Typbibliothek importieren... die checkbox Komponenten-Wrapper generieren wählen und dann installieren. Schon hat man (auf der Seite ActiveX) eine neue Komponete. Diese hat dann auch automatisch die Ereignisse (wie bei Delphikomponenten selber).

    Und Tschoe
    Willi

    Comment


    • #3
      Hi,

      Danke erst mal... Hat mir aber leider nicht viel weitergeholfen, da ich die TypeLib nicht einbinden will... ich habe den Server mit CreateOleObject instanziert und wollte das auch so beibehalten. Hierbei stellt sich mir die grundlegende Frage, ob das "Ding", welches ich da instanziere überhaup ein COM-Server ist, oder "nur" ein OLE-Server. Dazu stellt sich mir die Frage, ob es und wenn ja welche grundlegenden Unterschiede es zwischen COM und OLE gibt? Leider bin ich ein absoluter NewBee auf dem Gebiet! Kann man denn auch bei OLE die Ereignisse abfangen?

      Greetz
      Christia

      Comment


      • #4
        Ach ja, noch was...: Logischerweise ist meine Instanz vom Typ OleVariant. Vielleicht funktioniert es auch deswegen nicht. Kleiner Codeschnipsel:
        <PRE>
        Deklaration meiner Procedure:
        procedure ComComReceive(Sender :TObject; var InMessage :OleVariant);
        </PRE>
        <PRE>
        Überschreiben/Umlenken des Ereignisses:
        nasComCom.OnMessageReceived := ComComReceive;
        </PRE>
        <PRE>
        Fehlermeldung: Nicht genügend wirkliche Parameter (bei dem Umlenken des Ereignisses)
        </PRE>
        Also macht Delphi an dieser Stelle einen normalen Prozeduraufruf und keine Variablenzuweisung... :-(

        Christia

        Comment


        • #5
          Warum willst du keine Typelib einbinden ? <BR>
          Ich vermute mal, daß du das Objekt mit später Bindung einfügen möchtest. Um die Events zu nutzen mußt du client das entsprechnde Interface (das was in der Typelib des Servers definiert ist) Implementieren, d.h. du must an deinem Client ein entsprechendes Eventobject erzeugen und dem Server übermitteln. Einfacher ist wirklich den Delphi-Wizard zu verwenden, oder aber das Tool EventSinkImp. Ich hab's gestern auch zum erstenmal ausprobiert und es tut seinen Dienst. Wie man das ganz jetzt aber mit später Bindung macht, weiß ich auch nicht. So wie ich das meine verstanden zu haben, ist das Event-Interface immer nur mit später Bindung zu erreichen.

          Der Unterschied zwischen CreateOleObject und CreateComObject ist der, daß man mit CreateOleObject ein Object haben muß, daß das IDispatch Interface unterstützt. (s. Delphi Hilfe)
          <BR>
          Grüße <BR>
          Willi

          Comment

          Working...
          X