Announcement

Collapse
No announcement yet.

Was ist eigentlich COM bzw. COM+

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

  • Was ist eigentlich COM bzw. COM+

    Hallo,

    ich habe es schon öffter gelesen, dieses COM. Aber ich weis bis heute nicht was eigentlich dahinter steckt. In den hiesigen Beispielen sieht es aus als wäre es eine Weiterentwicklung der DDE - Schnittstelle.

    Kann mir jemand kurz sagen wofür COM und COM+ gut ist bzw. welche Vorteile der Einsatz von COM hat ?

    <pre>
    Bis dann
    Mathias
    </pre>

  • #2
    Hallo,

    hinter der Abkürzung COM verbirgt sich das <b>Component Object Model</b>, bei dem ausführbare Module (binär oder VBScript) ihre Fähigkeiten über ein Interface anderen Anwendungen zur Verfügung stellen. COM war nur ganz am Anfang eine Weiterentwicklung von DDE (alias OLE 2), heute besteht jede neue Windows- und Delphi-Version intern immer mehr aus COM-Objekten (die Stichworte ActiveX, DirectX, ASP, WSH, Automation, ADS usw. lassen die Bandbreite erahnen, wobei bei Delphi der Debugger und die BDE bereits "COM-like" ist).

    Der immense Vorteil von COM liegt darin, dass Module unabhängig von der Sprache, mit der sie geschrieben wurden, in allen COM-fähigen Entwicklungsumgebungen genutzt werden können. Zur Zeit benötigt der Entwickler jedoch noch entsprechend viel theoretisches Know-How (Type Library, Class Factory, Marshaler, Apartment usw.), aber mit dem neuen <b>Windows .NET</b> verschwinden diese Teile vollkommen im Hintergrund, so dass der Entwickler ohne Nebenwirkungen unmittelbar von den Vorteilen Nutzen ziehen kann. Allerdings ist die Endfassung von .NET erst für das Ende des nächsten Jahres angekündigt

    Comment


    • #3
      Hallo,

      danke für den gedanklichen Einstieg. Globale Lösungen sind immer Interessant, gute Idee...

      Burning Brains....
      Weist Du zufällig wo man sich ein paar Codebeispiele herunterladen kann ?

      <pre>
      Bis dann
      Mathias
      </pre&gt

      Comment


      • #4
        Ich habe das falsch ausgedrückt, Codebeispiele würde nicht viele bringen, ich setzte für die Web Programmierung Visual Studio 6 Enterprise ein, wie kann man sich einen überblick über die vorhanden Com Objekte verschaffen MS und Delphi ?

        danke nochmal

        <pre>
        Bis dann
        Mathias
        </pre&gt

        Comment


        • #5
          <b>Visual Basic-Code in Delphi 5 übersetzen - Hilfe Herr Kosch,</b><p>

          mir liegt ein Visual Basic-Code vor, den ich in Delphi5 übersetzen muß:<p>

          Public Function DDEDial(Nummer As String) As Boolean<br>

          Dim intKan1 As Long<br>
          'Fehlerbehandlungsroutine einrichten.<br>
          On Error Resume Next<br>
          'Verknüpfung herstellen.<br>
          intKan1 = DDEInitiate("EuriTel", "DDE")<br>
          'Falls Fehler auftritt, wurde EuriTel vielleicht<br>
          If Err Then<br>
          'nicht gestartet. Fehler zurücksetzen und Funktion beenden<br>
          Err = 0<br>
          DDEDial = False<br>
          Exit Function<br>
          End If<br>
          <p>
          'Nummer wählen.<br>
          DDEExecute intKan1, "ATD" & Nummer<br>
          DDETerminate intKan1<br>
          DDEDial = True<br>
          <p>
          End Function<br&gt

          Comment


          • #6
            <b>Nachtrag zur Anfrage Visual Basic-Code in Delphi 5 übersetzen</b><p>

            Besser wäre es natürlich, wenn anstelle der DDE die OLE-Automation bzw. COM benutzt werden könnte

            Comment


            • #7
              Hallo,

              die Frage, ob das Programm <i>EuriTel</i> eine Fernsteuerung via Automation erlaubt, kann nur die Dokumentation von EuriTel beantworten.

              Die unter Windows 3.x übliche DDE-Kommunikation hat nichts mit COM zu tun, sondern läuft nach ganz anderen Spielregeln ab. In Delphi steht die Komponente <b>TDDEClientConv</b> zur Verfügung, die Grundlagen werden auf der Hilfeseite angesprochen.

              Das folgende Beispiel demonstriert, wie unter <b>Delphi 1</b> (für Windows 3.x) die DDE-Fernsteuerung von Microsoft Word aussah:
              <pre>
              procedure TFormDDE.FormCreate(Sender: TObject);
              var
              hWinWord : hWnd;
              wRet : THandle;
              begin
              hWinWord := FindWindow('OpusApp', nil);
              if hWinWord = 0 then
              begin
              wRet := WinExec(FormMain.szPrgLine, SW_ShowMaximized);
              if wRet < 32 then
              MessageDlg('Kann WinWord nicht starten.',
              mtInformation, [mbOK], 0);
              end
              else ShowWindow(hWinWord, SW_SHOWMAXIMIZED);
              DdeClientConvWORD.OpenLink;
              if not DdeClientConvWORD.ExecuteMacro(FormMain.szCommand, True)
              then MessageDlg('Kann WinWord-Makro nicht aufrufen!',
              mtInformation, [mbOK], 0);
              DDEClientConvWORD.CloseLink
              end;
              </pre&gt

              Comment


              • #8
                <b> DDE - Visual Basic in Delphi 5 übersetzen </b><p>

                Hallo Herr Kosch,<br>

                vielen Dank für die schnelle Mitteilung.<br>

                In dem Programm habe ich folgende Information gefunden:<br>

                Das Programm EuriTel kann von anderen Programmen aus mit DDE gesteuert werden.<br>

                Zur Steuerung des Programms EuriTel verwenden Sie folgende Einstellungen:<br>

                LinkTopic EuriTel|DDE<br>

                Die Befehle sind mit LinkExecute ausführbar.<br>

                Folgende Befehle sind möglich:<br>
                ATDxxxx Nummer xxxxxxx wählen.<br>

                ATH Auflegen<br>

                Show Zeigt das EuriTel Fenster<br>

                Hide Minimiert das EuriTel Fenster<br>

                ATDMAxxxx Nummer xxxx wählen, MSN A benutzen (Nur Eurit 20 / 30) analog mit MSN B C D E<br>

                ATDMAH1xxxx Nummer xxxx wählen, MSN A benutzen (Nur Eurit 40) analog mit MSN B C D E<br>

                ATDyyyxxxx Nummer xxxx wählen, vorher Makro yyy ausführen (Nur Eurit 40)<br>

                Atxxxxxxxx Befehl an das Telefon schicken (alle Befehle des Eurit unterstützt, jedoch kann es zu unvorhergesehenen Effekten kommen, falls versucht wird Einträge im Telefonbuch oder die Konfiguration zu ändern).<br>

                DIALxxxx Nummer xxx wählen, aktuelle Einstellungen verwenden (Makro, MSN) <br>
                Die folgenden Informationen können über DDE angefordert werden:<br>
                LinkTopic LinkItem<br>
                Letzter Teilnehmer (Telefonnummer) EuriTel|DDE DDENummer<br>
                Letzter Teilnehmer (Name) EuriTel|DDE lblName<br>
                Status (als Text) EuriTel|DDE <br>lblStatus
                Gebühren EuriTel|DDE lblGebühren<br>
                Gesprächsdauer EuriTel|DDE lblDauer<br>
                Benutzte MSN EuriTel|DDE lblMSN<br>
                Beispiel: Wählen aus MS Access:<br>
                Fügen Sie ein Modul ein und deklarieren folgende Funktion:<br>
                Public Function DDEDial(Nummer As String) As Boolean<br>
                Dim intKan1 As Long<br>
                'Fehlerbehandlungsroutine einrichten.<br>
                On Error Resume Next<br>
                'Verknüpfung herstellen.<br>
                intKan1 = DDEInitiate("EuriTel", "DDE")<br>
                'Falls Fehler auftritt, wurde EuriTel vielleicht<br>
                If Err Then<br>
                'nicht gestartet. Fehler zurücksetzen und Funktion beenden<br>
                Err = 0<br>
                DDEDial = False<br>
                Exit Function<br>
                End If<br>
                'Nummer wählen.<br>
                DDEExecute intKan1, "ATD" & Nummer<br>
                DDETerminate intKan1<br>
                DDEDial = True<br>
                End Function<br>
                Mit MSACCESS funktioniert das einwandfrei. Wie kann ich das nach Delphi5 übersetzen ? Gib es sowas wie LinkExecute in Delphi ?<br&gt

                Comment


                • #9
                  Hallo,

                  das ACCESS-Beispiel kann mit TDDEClientConv nachgebaut werden. Im Objektinspektor werden die Eigenschaften <b>DdeService</b> und <b>DdeTopic</b> konfiguriert. Leider kann ich das hier im Beispiel nicht machen, da Delphi beim Schließen des Dialogs prüft, ob der DDE-Service erreichbar ist. Das sollte bei Ihnen jedoch so aussehen:
                  <pre>
                  object DdeClientConv1: TDdeClientConv
                  DdeService = 'EuriTel'
                  Left = 144
                  Top = 48
                  LinkInfo = (
                  'Service EuriTel'
                  'Topic DDE')
                  end
                  </pre>
                  Die TDdeClientConv-Methode <b>ExecuteMacro</b> entspricht dem VBA-Gegenstück DDEExecute

                  Comment

                  Working...
                  X