Hans-Dieter: COM und (nicht) sichtbarkeit einer Form aus VB-DLL

Hallo zusammen,

ich wende mich jetzt doch mal hoffnungsvoll an die hier oft versammelte <schleim>Coderelite</schleim>  ;-) da ich alleine im Moment nicht weiterkomme.

Ich arbeite öfter mit PHP-Scripten auf der Kommandozeile unter Windows, (mittlerweile XP). Benutzereingaben wie z.B. Datei- oder Verzeichnisauswahl realisiere ich immer mit der Winbinder-Extension. Die bindet die nativen Windows-Dialoge in PHP ein. Ein Feature das die Extension nicht unterstützt ist das "Fallenlassen" (drop) von Dateinamen aus z.B. einem Explorerfenster. Das habe ich jetzt versucht für meine Scripte selber nachzurüsten, indem ich eine sogenannte ActiveX-DLL mit VB6 erstellt habe. Solche DLLs habe ich schon des öfteren erfolgreich erstellt. Die müßen dann im system registriert werden und stehen danach in Scriptsprachen und Programmiersprachen als COM-Objekte zur Verfügung. Aktuelles Problem ist, das das Fenster mit einem Listview aus der DLL nicht sichtbar wird. PHP wird unter meinem aktuellen Benutzeraccount ausgeführt, also sollte es doch eigentlich klappen? (Wenn ich z.B. solche selbst erstellten COM-DLLs einsetze die Winamp oder Photoshop oder Nero aufrufen, sind die Applikationen ja auch sichtbar.) Was läuft hier anders?

Gruß,
Hans-Dieter

  1. Hallo zusammen,

    bin überhaupt nicht weiter fündig geworden in dem COM-Thema, habe aber eine andere Lösung gefunden, eine funktionierende: mein VB-Programm wird aus PHP mittels exec() gestartet, es ist das selbe GUI-Programm mit einem Listview auf das man Dateinamen ziehen und fallen lassen kann wie in der (warum auch immer) mißglückten COM-Variante, mit dem einzigen Unterschied, das es jetzt beim Beenden die Dateiliste nach StdOut schreibt. Wie man das in VB6 macht habe ich  hier gefunden: http://www.pgacon.com/visualbasic.htm#Using%20the%20standard%20input%20and%20output%20streams%20in%20VB

    Der PHP-Code ist somit auf ein Minimum geschrumpft:
    $exe = 'C:/bin/DropBasket.exe';
    $aOutput = array();
    $iRetval = 0;
    exec($exe,$aOutput,$iRetval);
    var_dump(array($iRetval,$aOutput));

    $aOutput ist dann schon ein Array mit allen Dateinamen.  ;-)

    (Es sind doch oft die kleinen Dinge, die das Leben schöner machen!)

    Gruß,
    Hans-Dieter