Share via


Erstellen von Automatisierungsservern

Ein Automatisierungsserver ist eine COM-Komponentenanwendung, die Funktionalität bereitstellt, die mittels Automatisierung von anderen Anwendungen verwendet und erneut verwendet werden kann. So können Sie mittels Visual FoxPro z. B. einen Automatisierungsserver erstellen, der wieder verwendbare Formulare (in einer prozessexternen EXE-Datei) anzeigt oder eine komplexe Routine in eine einfache, von anderen Programmierern verwendbare Komponente kapselt. Darüber hinaus können Sie eine oder mehrere Klassen zur Verwaltung und Umsetzung von unternehmensweit gültigen Geschäftsregeln erstellen. Eine Clientanwendung, die das Geschäftsregelobjekt verwendet, kann die Eingabeparameter in einem Methodenaufruf übergeben. Der Automatisierungsserver kann daraufhin einen großen Teil der Arbeit übernehmen, indem er Daten von verschiedensten Quellen abruft und speichert und komplexe Berechnungen durchführt, bevor er die Antwort zurückgibt.

Beispiele für Automatisierungsserver finden Sie im Visual FoxPro-Verzeichnis ...\Samples\Servers.

Erstellen des Automatisierungsservers

Alles, was Sie zum Erstellen eines Automatisierungsservers in Visual FoxPro benötigen, ist ein Projekt, das als OLEPUBLIC definierte Klassen enthält. Sie können beliebig viele OLEPUBLIC-Klassen in ein Projekt einfügen. Definieren können Sie diese Klassen in Programmdateien (PRG) oder in Klassenbibliotheken (VCX).

So erstellt beispielsweise die folgende Klassendefinition in einer Programmdatei eine benutzerdefinierte OLEPUBLIC-Klasse:

DEFINE CLASS person AS CUSTOM OLEPUBLIC
   FirstName = SPACE(30)
   LastName = SPACE(45)

   PROCEDURE GetName
      RETURN THIS.FirstName + " " + THIS.LastName
   ENDPROC
ENDDEFINE

Wenn Sie im Klassen-Designer eine Klasse entwerfen, wählen Sie im Dialogfeld Klasseninfo die Option OLE Public aus, um die Klasse als OLEPUBLIC festzulegen.

Kompilieren des Automatisierungsservers

In Visual FoxPro können Sie entweder einen prozessinternen oder einen prozessexternen Automatisierungsserver erstellen. Eine Out-of-Process-Komponente ist eine ausführbare Datei (EXE), die innerhalb eines eigenen Prozesses abläuft. Die Kommunikation zwischen Clientanwendung und Out-of-Process-Server wird daher als Cross-Process-Kommunikation bezeichnet. Bei einer In-Process-Komponente handelt es sich um eine Dynamic-Link Library (DLL), die im gleichen Prozessadressraum ausgeführt wird wie der Client, von dem sie aufgerufen wurde.

Beide Methoden haben ihre Vorteile. Ein In-Process-Server ist schneller, da der bei der Kommunikation zwischen den Prozessen entstehende Overhead entfällt. Andererseits kann ein Out-of-Process-Server im Gegensatz zu einem In-Process-Server auch im Remotebetrieb bereitgestellt werden. Darüber hinaus beendet ein schwerer Fehler in der DLL auch den Client, da sich In-Process-Server und Client den gleichen Prozessadressraum teilen, wohingegen ein Fehler in der ausführbaren Datei des Out-of-Process-Servers lediglich den Server beendet.

Anmerkung   Da prozessinterne DLL- und prozessexterne EXE-Automatisierungsserver über die Klasseninstanziierung aufgerufen werden, muss das Projekt keine Hauptdatei angeben. In Visual FoxPro können Sie nun einen prozessinternen DLL- oder einen prozessexternen EXE-Automatisierungsserver erstellen, ohne zuerst im Projekt-Manager eine Hauptdatei anzugeben.

Wenn Sie mit globalen OLE-Klassen eine ausführbare Datei erstellen, büßen Sie keine der normalen EXE-Fähigkeiten ein. Sie können die ausführbare Datei noch immer ausführen, eine Benutzeroberfläche sowie die gesamte normale Funktionalität zur Verfügung stellen, die auch eine einfache Anwendung umfassen würde. Sie erhöhen jedoch die Erweiterbarkeit Ihrer Anwendung, indem Sie zulassen, dass andere Anwendungen von der spezifischen Funktionalität profitieren, die Sie zur Verfügung stellen.

Anmerkung   Greifen mehrere Benutzer auf den Automatisierungsserver zu, kann es zu Konflikten kommen. Wenn Sie einen Zugriff auf Ihre Funktionen sowohl über Automatisierung als auch über eine Benutzeroberfläche bereitgestellt haben, empfiehlt sich für die Oberfläche eine zusätzliche Schicht der Konsistenzprüfung, um sicherzustellen, dass die Umgebung nicht geändert wurde.

So kompilieren Sie einen Automatisierungsserver

  1. Wählen Sie im Projekt-Manager die Schaltfläche Erstellen.

  2. Wählen Sie im Dialogfeld Erstellungsoptionen die Option Ausführbare Win32/COM-Server (EXE), Single-Thread-COM-Server (DLL) oder Multi-Thread-COM-Server (DLL).

  3. Wählen Sie OK.

    - Oder -

Nachdem Sie das Projekt erstellt haben, werden die Serverklassen im Dialogfeld Projektinformation angezeigt. Hier können Sie auch für jede Klasse eine Hilfedatei sowie eine Kontextnummer für das jeweilige Hilfethema angeben. Diese Hilfedatei kann von den meisten generischen Objektkatalogen aus geöffnet werden.

Im Dialogfeld Projektinformation können Sie klassenspezifische Instanziierungswerte wählen. Die Instanziierungsoptionen sind:

  • Kann nicht erstellt werden   Obwohl die Klasse als "OLE Public" markiert ist, steht sie für andere Anwendungen nicht zur Verfügung. Beispielsweise könnten Sie über eine Standardbibliothek mit globalen OLE-Klassen verfügen, die in mehreren Anwendungen verwendet wird, und die Automatisierung einer oder mehreren Klassen für eine einzelne Anwendung deaktivieren.

  • Einfache Verwendung   Jede Clientanwendung, die auf Ihren Server zugreift, erstellt eine separate Instanz der Serverklasse. Jede Instanz verfügt über einen eigenen Thread. Separate Instanzen machen zwar mehr Speicher erforderlich, sie ermöglichen aber dem Betriebssystem durch Auswahl von "Einfache Verwendung", mit preemptivem Multitasking zu arbeiten.

  • Mehrfache Verwendung   Nachdem der Server erstellt wurde, können andere Anwendungen die gleiche Instanz verwenden.

    Anmerkung   Wenn Sie auf der Registerkarte Server des Dialogfeldes Projektinformation Änderungen vornehmen, müssen Sie die DLL- oder EXE-Datei neu erstellen, damit die geänderten Einstellungen wirksam werden können.

Beim Erstellen eines Projekts mit globalen OLE-Klassen werden drei Dateien erstellt:

  • Die DLL- oder EXE-Datei
  • Eine Datei mit der Typbibliothek (TLB)
  • Eine Registrierungsdatei (VBR)

Bei der Typbibliothek handelt es sich um eine Binärdatei, in der alle von Ihrem Automatisierungsserver zur Verfügung gestellten Klassen zusammen mit deren Eigenschaften, Methoden und Ereignissen aufgelistet sind. Diese Informationen werden von den OLE-Objektkatalogen gelesen und in einer lesbaren Schnittstelle dargestellt. Weitere Informationen finden Sie unter Binden von Typbibliotheken.

In der Registrierungsdatei werden die globalen eindeutigen Bezeichner (Global Unique Identifier, GUIDs) für die Klassen des Servers aufgelistet.

Anmerkung   Eine Registrierungsdatei mit der Dateinamenerweiterung VBR ist das gleiche wie eine Registrierungsdatei mit der Erweiterung REG, außer dass die VBR-Datei keine absoluten Pfade enthält.

Registrieren eines Automatisierungsservers

Ihre Automatisierungsserver stehen auch für andere Anwendungen zur Verfügung, sobald die Server zu der Windows-Registrierung hinzugefügt wurden. Wenn Sie einen Automatisierungsserver erstellen, wird dieser automatisch auf dem Computer registriert, auf dem er erstellt wurde. Sie können Ihre Server auch auf anderen Computern registrieren.

Wenn Sie die Installationsdisketten mit Hilfe von Visual FoxPro Setup erstellen, registriert das Setupprogramm die Server auf den Computern der Kunden. Sie können Server auch manuell zur Registrierung hinzufügen.

So registrieren Sie eine EXE-Komponente

  • Führen Sie die EXE-Datei mit dem Parameter /regserver aus.

    Damit beispielsweise die Datei Myserver.exe registriert wird, geben Sie den folgenden Befehl ein:

    myserver /regserver
    

So entfernen Sie eine eingetragene EXE-Komponente aus der Registrierung

  • Führen Sie die EXE-Datei mit dem Parameter /unregserver aus.

    Um beispielsweise die Datei Myserver.exe aus der Registrierung zu entfernen, geben Sie den folgenden Befehl ein:

    myserver /unregserver
    

So registrieren Sie eine DLL-Komponente

  • Führen Sie REGSVR32 mit dem Namen des Servers aus.

    Damit beispielsweise die Datei Myserver.dll registriert wird, geben Sie den folgenden Befehl ein:

    REGSVR32 myserver.dll
    

So entfernen Sie eine eingetragene DLL-Komponente aus der Registrierung

  • Führen Sie REGSVR32 mit dem Namen des Servers und dem Parameter /u aus.

    Damit beispielsweise die Datei Myserver.dll registriert wird, geben Sie den folgenden Befehl ein:

    REGSVR32 /u myserver.dll
    

    Anmerkung   Die Registrierung enthält den vollständigen Pfadnamen für die Datei. Wenn Sie die Datei also verschieben, müssen Sie sie erneut registrieren.

Verwenden des Automatisierungsservers

Jede Anwendung, in der Automatisierungsobjekte erstellt werden können, kann Objekte basierend auf Ihrem Automatisierungsserver erstellen, Eigenschaften festlegen, die nicht als HIDDEN oder PROTECT deklariert sind, und Methoden aufrufen. Wenn Ihr Server z. B. den Namen foxole trägt und eine Klasse mit Namen person mit einer GetName-Methode enthält, dann könnte in Visual FoxPro folgender Code ausgeführt werden:

oTest = CREATEOBJECT("foxole.person")
cName = oTest.GetName()

Ein ähnlicher Code könnte in Microsoft Excel oder Visual Basic ausgeführt werden:

Set oTest = CreateObject("foxole.person")
cName$ = oTest.GetName()

Behandeln von Ausnahmen

Wenn ein Visual FoxPro-Automatisierungsserver eine Ausnahme erzeugt, legt der Automatisierungsserver das COM-Objekt ErrorInfo (über die IErrorInfo-Schnittstelle) fest und bricht die aktuelle Methode ab. Der Automatisierungsclient kann nun entweder den Visual FoxPro-Automatisierungsserver freigeben oder, falls der Client auf das COM-Objekt ErrorInfo zugreifen kann, die Ausnahme basierend auf dieser Information behandeln.

Ein Beispiel zur Verwendung von ErrorInfo finden Sie unter _ErrorInfo( ), API-Bibliotheksroutine.

Die neue Visual FoxPro-Funktion COMRETURNERROR( ) behandelt Fehler, die in einem Automatisierungsserver auftreten. Sie können COMRETURNERROR( ) in der Error-Methode verwenden, um die COM-Ausnahmestruktur mit Informationen aufzufüllen, die Automatisierungsclients verwenden können, um die Ursache von Automatisierungsserverfehlern zu bestimmen. Weitere Informationen finden Sie unter COMRETURNERROR( )-Funktion.

Aktivieren oder Zurückgeben von Fehlermeldungen von Automatisierungsservern

Die einzig mögliche Kommunikation mit den von einem Automatisierungsserver (COM-Komponente) bereitgestellten Objekten erfolgt über die Methoden und Eigenschaften der nach außen hin sichtbaren Klassen. Ruft eine Clientanwendung eine Methode eines Objekts auf und tritt im Automatisierungsserver ein Fehler auf, gibt die Methode entweder einen Fehlerwert zurück oder aktiviert eine Fehlermeldung in der Clientanwendung.

Die Clientanwendung entscheidet, ob der Benutzer gewarnt wird oder ob mit einem anderen Ausführungspfad fortgefahren werden soll. Der Automatisierungsserver selbst kommuniziert nie mit dem Benutzer. Hierdurch wird erreicht, dass die Position des Automatisierungsservers für die Clientanwendung transparent sein kann. Der Automatisierungsserver kann lokal vorliegen, d. h. auf dem Computer des Benutzers ausgeführt werden, oder Sie können den Automatisierungsserver mit Hilfe der Remoteautomatisierung von Visual FoxPro auf einem Netzwerkserver ausführen.

Siehe auch

Steuern von Visual FoxPro über andere Anwendungen | Verwenden von Remoteautomatisierung | Freigeben von Informationen und Hinzufügen von OLE | Dialogfeld "Klasseninfo" | Dialogfeld "Erstellungsoptionen"