Announcement

Collapse
No announcement yet.

Delphi COM-Server von 2 Skripte gleichzeitig ansprechen

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

  • Delphi COM-Server von 2 Skripte gleichzeitig ansprechen

    Hallo, ich möchte einen COM-Server schreiben, der eine Form anzeigt. VBS-Skript 1 ruft Methode auf zum anzeigen von Form. Dann startet Skript 1 ein Skript 2. Skript 2 soll nun auf immer noch angezeigt Form schreiben können. Wie mach ich das ????

  • #2
    Hallo,

    auch dann, wenn im Delphi-Wizard für Automation-Server der Eintrag <i>Multi-Instanz</i> ausgewählt wird, erhält jeder Client seine eigene Instanz des COM-Objekts. Alle Instanzen werden nur in einem gemeinsamen Serverprozess ausgeführt, d.h. somit teilen sich alle Clients nur die globalen Daten des Servers. Die COM-Objekte mit ihren Objektfeldern hingegen "gehören" nur jeweils einem einzigen Client. Der Grund für dieses Verhalten liegt im Aufbau der ClassFactory-Klassen von Delphi.

    Um dieses Verhalten zu ändern, muss das eigene COM-Objekt als <b>Singleton</b>-Server implementiert werden. Ein Weg dazu besteht im Ableiten einer eigenen Class Factory:
    <pre>
    function TSingletonAutoObjectFactory.CreateComObject(const Controller: IUnknown): TComObject;
    begin
    if FCOMObj = nil then
    FCOMObj := inherited CreateComObject(Controller);
    Result := FCOMObj;
    end;

    destructor TSingletonAutoObjectFactory.Destroy;
    begin
    FCOMObj := nil;
    inherited;
    end;
    </pre>
    Im <b>initialization</b>-Abschnitt der Unit wird die neue Class Factory scharfgemacht:
    <pre>
    // {$DEFINE NO_SINGLETON}

    initialization
    {$IFDEF NO_SINGLETON}
    TAutoObjectFactory.Create(ComServer, TSingletonSrvExample, Class_SingletonSrvExample,
    ciMultiInstance, tmApartment);
    {$ELSE}
    TSingletonAutoObjectFactory.Create(ComServer, TSingletonSrvExample, Class_SingletonSrvExample,
    ciMultiInstance, tmApartment);
    {$ENDIF}
    end.
    </pre>
    Die ausführliche Beschreibung dieses Prinzips ist in meinem Buch <i>COM/DCOM/COM+ mit Delphi</i> zu finden

    Comment

    Working...
    X