Announcement

Collapse
No announcement yet.

Funktionsaufruf beim Registrieren des Servers

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

  • Funktionsaufruf beim Registrieren des Servers

    Ich möchte beim Registrieren meines COM Servers eine eigenene Funktion aufrufen. Welche Möglichkeiten dazu gibt es ?
    Vielen Dank.
    Dietmar

  • #2
    Hallo,

    für diese Aufgabe sieht Delphi vor, dass der eigene COM-Server einen eigenen Nachfahren der <b>Class Factory</b> implementiert und dort die zusätzlichen Schritte abarbeitet. In der geerbten Methode <b>UpdateRegistry</b> kann über <b>if Register then...</b> geprüft werden, ob der Server registriert wird. Das folgende Beispiel demonstriert, wie zum Beispiel das neue Apartment-Modell <b>Neutral</b> für Windows 2000 beim Registrieren eingetragen wird:

    Schritt 1: Eigenen Class Factory-Nachfolger ableiten
    <pre>
    type
    TTNAAutoObjectFactory = class(TAutoObjectFactory)
    procedure UpdateRegistry(Register: Boolean); override;
    end;

    { TTNAAutoObjectFactory }

    procedure TTNAAutoObjectFactory.UpdateRegistry(Register: Boolean);
    var
    sClassID, sServerKeyName: String;
    begin
    inherited UpdateRegistry(Register);
    if Register then
    begin
    if Instancing = ciInternal then Exit;
    sClassID := GUIDToString(ClassID);
    sServerKeyName := 'CLSID\' + sClassID + '\' + ComServer.ServerKey;
    if (ThreadingModel <> tmSingle) and IsLibrary then
    CreateRegKey(sServerKeyName, 'ThreadingModel', 'Neutral');
    end;
    end;
    </pre>
    Schritt 2: Eigene Class Factory aktivieren
    <pre>
    initialization
    (*
    TAutoObjectFactory.Create(ComServer, TTNAObjSrv, Class_TNAObjSrv,
    ciMultiInstance, tmApartment);
    *)
    TTNAAutoObjectFactory.Create(ComServer, TTNAObjSrv, Class_TNAObjSrv,
    ciMultiInstance, tmApartment);
    end.
    </pre&gt

    Comment


    • #3
      Hallo Herr Kosch,

      beim compilieren Ihres Beispiels habe ich folgende Fehlermeldung erhalten:

      "Methode 'UdateRegistry' nicht in Basisklasse gefunden"

      Welche Basisklasse ist noch zu verwenden? <br>Vielen Dank <br> Dietma

      Comment


      • #4
        Hallo Herr Kosch,
        beim Test ihres Beispiels habe ich folgende Fehlermeldung erhalten:<br>
        "Methode 'UdateRegistry' nicht in Basisklasse gefunden"<br>
        Was muß ich noch einbinden, um die Funktion verwenden zu können ?<br>
        Vielen Dank <br>Dietma

        Comment


        • #5
          Hallo Herr Kosch,<br>
          vielen Dank für ihr Programmbeispiel. Es funktioniert wunderbar.<br>
          Dietma

          Comment

          Working...
          X