Componet Object Model & PHP

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Componet Object Model & PHP

    Hallo!
    Ich habe ein Problem mit der COM-Schnittstelle.

    Für alle die nicht wissen, was die COM-Schnittstelle ist:
    Component Object Model, Microsofts Standard für Software-Komponenten, Basistechnik von Microsofts OLE. COM definiert unabhängig von einer Programmiersprache das Interface eines Software-Objekts und macht es für andere Programme zugänglich. Bei COM beschränkt sich dies auf einen Rechner, bei DCOM können auch Komponenten auf anderen Rechnern einbezogen werden. Das heisst, das zum Beispiel mit diesem PHP-Script Word gesteuert werden kann.

    PHP-Code:
    <? 
    $word = new COM("word.application") or die ("Not available"); 
    echo "Word, Version {$word->Version} geladen<BR>"; 
    $word->Visible = 1; 
    $word->Documents->Add(); 
    $word->Selection->TypeText("Wir schreiben in Word... "); 
    $word->Documents[1]->SaveAs("Mit PHP generiert.doc"); 
    $word->Quit(); 
    ?>
    Nun aber zu meiner Frage:
    $word = new COM("word.application")
    Damit wird eine neue Klasse instanziert, mit welcher man über die ProgID "word" bequem das gleichnamige Programm steuern kann.
    Weiterhin wäre es interessant zu erfahren, wie die ProgIDs oder CLSIDs zu anderen Programmen lauten. So zum Beispiel zum I-Net Explorer.

    $word->Documents->Add(); Zum Beispiel öffnet dies ein neues Document in Word.
    Wo bekomme ich nun mal eine Übersicht über mögliche Befehle, mit denen man andere Programme über die COM-Schnittstelle steuern kann.

  • #2
    Re: Componet Object Model &amp; PHP

    Wo bekomme ich nun mal eine Übersicht über mögliche Befehle, mit denen man andere Programme über die COM-Schnittstelle steuern kann.
    hmm, wohl ein generelles problem, bei closed source geschichten, irgendwas rauszukriegen, was sich ausserhalb der proprietären standards bewegt. ich kann mir zudem vorstellen, dass es ausserordentlich schwierig sein wird, represäntative spezifikationen zu bekommen, da einem gerne auch mal ein paar 'steinchen in den weg gelegt' werden können, wie dieser link untermauert:

    http://msdn.microsoft.com/isapi/msdn...ecs/S1D137.htm

    von den meisten projekten bei sourceforge kenne ich sowas nicht.

    ich empfehle dir daher, falls es möglich ist, schnittstellen-kommunikation mit den tools des herstellers zu verwenden. z.b. statt php asp zu verwenden, wäre denkbar. aber dann darfst du dich wahrscheinlich mit anderen sachen rumschlagen ...

    vielleicht kannst du ja einen umweg in php mit der java integration schaffen? java bietet, soweit ich weiss, gut dokumentierte apis, die das gleiche tun, wie die php-com lib. der nachteil wäre eine zusätzliche ausführungsschicht, was klar auf die performance drückt. allerdings tut das com ohnehin schon von sich aus.

    hier der link zur java integration:
    http://www.php.net/manual/en/ref.java.php


    beebob

    Kommentar


    • #3
      ps: hier noch ein link, wie man externe java libraries in php/java einbinden kann.

      http://www.onlamp.com/pub/a/php/2001...av.html?page=2

      Kommentar


      • #4
        Erstmal vielen Dank an Dich!
        Das war die erste vernünftige Antwort, die ich bekommen habe. Und da hab ich schon in einigen Foren angefragt! Es scheihnt nicht viele zu geben, die sich damit auskennen.
        Deine zwei Lösungansätze sind sicher richtig und würden schneller zum Ergebnis führen. Aber dafür müsste ich mir noch eine neue Prog-Sprache aneignen, da ich weder Java noch ASP mächtig bin. Also wäre für MICH dieser Weg sicher der komplizierteste.

        Leider funzt dein Microsoft-Link nicht mehr?!? Es ist aber auch wirklich schwer, überhaupt an brauchbare Informationen zu kommen. Hab da im I-Net bis jetzt noch nichts gefunden.
        Aber es muss doch generell auch mit PHP möglich sein, Windows-Programme über diese COM zu steuern. Wie das funzt hab ich auch schon verstanden (denke ich zumindest ).
        Das einzige Problem ist, dass ich zum ersten nicht weiss wie die ProgId zum ansteuern eines Programms lautet (wo könnte man das ausfindig machen? Hab mal was gelesen, dass diese in der Registry vermerkt sein sollen??? ).
        Und zum zweiten, wie die Befehle lauten, die dann solche Programme steuern.

        Noch ne Frage: Es ist doch soweit ich weiss, garnicht möglich an den Source für diese COM-Schnittstelle zu kommen, weil dieser doch schon in binärer Form (wahrscheinlich als dll) vorliegt, oder?!?

        Kommentar


        • #5
          Hi,

          also der Hauptgrund, warum Du in IT-orientierten Foren meist keine Komponetentechnologie-Kompetenzen findest, liegt im Anspruch und Anwendungsnutzen. Selbst Applikationsentwickler brauchen für den professionellen Einsatz von COM, DCOM, COM+, CORBA, RMI und EJB etwa 1-2 Jahre Einarbeitung (wenn sie gut sind).
          Aber aufgrund von Samples, kannst Du die eine oder andere COM-Anbindung vielleicht umsetzen :

          http://www.phpbuilder.com/columns/alain20001003.php3

          COM ist ein Industriestandard von Microsoft. Der ist immer gleich und hat nicht mit der source-Implementierung in PHP zu tun. Was Du brauchst sind die CLSID´s bzw GUID´s in der registry.
          Die Spezifikation des COM-Standards findest hier:

          http://www.microsoft.com/com/

          Aber sei gewarnt! - Das ist nichts für Anfänger. Und z.B. bei der Umsetzung mit IDispatchInvoke wären analoge Erfahrungen in anderen Programmiersprachen von Vorteil (VB, C++, Delphi oder Java) von Vorteil.

          cu

          Blaster
          Yuppi, endlich Elite ...

          Kommentar


          • #6
            >> Leider funzt dein Microsoft-Link nicht mehr?!?

            ich weiss! genau das meinte ich nämlich mit den 'steinchen'

            Kommentar


            • #7
              Thx @blaster!
              Deine Tips haben mir doch schon etwas weitergeholfen. Zu empfehlen ist besonders der Link zu phpbuilder.com . Dort wird doch recht ausfühlich an einigen Beispielen beschrieben, wie man mit der COM arbeiten kann. So hab ich auch "herausgefunden" wo die ProgIDs versteckt sind.

              Allerdings beschleicht mich langsam das Gefühl, das es für den dazugehörigen Funktionsumfang zu jeder Application meist garkeine Dokumentation gibt.
              Hier ist wohl nur raten angesagt...

              Kommentar


              • #8
                @Opa U:

                Hmmmhm, ich hatte das selbe Problem damals mit C++ [MFC].

                Mit VBA an Office zu gehen für Automationsprozesse ist ja kein Problem, mit C++ - da muss man genau wissen wie und wo?

                Ich hatte den Funktionsumfang nur elongiert, indem ich die VBA Dokumentation von Office direkt analog in C++ transziliert hatte. Eine Alternative dazu ist das Auslesen der 'Helpstrings' der sogenannten IDL interface definition language, die die Schnittstellen zwischen den Modulen deklariert.

                Deshalb würde ich es mit PHP genauso versuchen. Trotzdem - Rudimentäre Bemühungen werden scheitern, wenn man sich nicht mit COM auskennt.

                Aber schön, dass ich Dir helfen konnte.

                cu

                Blaster
                Yuppi, endlich Elite ...

                Kommentar


                • #9
                  Joo, also wie man an Befehle für Office Applicationen herankommt weiss ich jetzt auch. Und zwar genauso wie du es gesagt hast, per Dokumentation aus VBA. Die lässt sich dann zum grossen Teil sogar auf PHP einfach übertragen. So fällt das kommandieren von Word, Excel, Powerpoint und co nicht schwer.

                  Allerdings an gewünschte Spezifikationen für den InetExplorer heranzukommen wird wohl wesentlich schwerer.
                  Ich werds aber mal mit der IDL versuchen. Vielleicht bringt das mehr...

                  Kommentar


                  • #10
                    vielleicht wäre es ja auch für andere hilfreich, wenn du deine ergebnisse hier rein posten könntest?

                    Kommentar


                    • #11
                      Original geschrieben von Op@ U.
                      Allerdings an gewünschte Spezifikationen für den InetExplorer heranzukommen wird wohl wesentlich schwerer.
                      Ich werds aber mal mit der IDL versuchen. Vielleicht bringt das mehr...
                      Da schießt Du wohl "mit Kanonen auf Mücken" (Konfuzius). Warum gehst Du nicht ganz simpel über Sockets.

                      @beebob:
                      Ich weiß nicht ganz was das bringen soll. Samples findest Du in PHPbuilder. Es geht hier um globale Informationen und Handgriffe, die von outsidern sowieso nicht verstanden werden.

                      P.S.: Wer ist/war R. Stallman? - Bartmodel?!
                      Yuppi, endlich Elite ...

                      Kommentar


                      • #12
                        @Blaster:
                        ja, du hast recht phpbuilder finde ich auch recht pragmatisch ...
                        es sollte ihn darauf hinweisen, dass das öffentliche zugänglich machen von dokumentationen aus dem hause renommierter konzerne, sträflich vernachlässigt wird

                        sagt dir gnu etwas?

                        Kommentar


                        • #13
                          Original geschrieben von beebob
                          @Blaster:
                          sagt dir gnu etwas?
                          Yupp, aber beantwortet das die Frage?
                          Yuppi, endlich Elite ...

                          Kommentar

                          Lädt...
                          X