Freigeben über


Serververbesserungen

Visual FoxPro umfasst zahlreiche Verbesserungen für COM-Server, durch die die Interoperabilität mit zentralen Plattformtechnologien, z. B. COM+-Diensten, verbessert wurde.

Implementieren von Schnittstellen

Eine Visual FoxPro-COM-Komponente kann eine gültige COM-Schnittstelle implementieren, die von einer anderen COM-Komponente definiert wurde. Dies bedeutet, dass die Visual FoxPro-Klasse sämtliche Elemente (Eigenschaften, Ereignisse und Methoden) dieser COM-Schnittstelle enthält. Es handelt sich hierbei nicht um wirkliche Vererbung im engeren Sinne, wie sie von Visual FoxPro OOP unterstützt wird, sondern eher um eine Vereinbarung, durch die geregelt wird, dass die Visual FoxPro-Klassendefinition denselben Satz an Elementen enthalten wird wie die Klasse der COM-Komponente.

Die Implementierung einer COM-Schnittstelle erfolgt mit der neuen IMPLEMENTS-Klausel des DEFINE CLASS-Befehls.

Beispiele für Visual FoxPro-COM-Komponenten, die die neue Unterstützung für IMPLEMENTS (und andere neue Serververbesserungen) verwenden, finden Sie in der Sammlung der COM+-Beispiele im Verzeichnis ...\Samples\COM+\.

Ereignisbindung

Visual FoxPro unterstützt die Fähigkeit zum Binden von Ereignissen anderer COM-Komponenten, z. B. ADO-Recordsets. (So können Sie z. B. Fox-Code ausführen, wenn der Datensatzzeiger in ein ADO-Recordset verschoben wird.)

Die Ereignisbindung wird durch die neue EventHandler( )-Funktion unterstützt. Um eine Visual FoxPro-Klasse an Ereignisse einer COM-Komponente zu binden, muss die Visual FoxPro-Klasse die Ereignisschnittstelle der COM-Komponente implementieren.

Diese Form der Ereignisbehandlung wird als "eng gekoppelt" bezeichnet, da sowohl Ereignisquell- als auch Ereignisempfängerobjekte zum Zeitpunkt des Ereigniseintritts aktiv sind. Die EventHandler( )-Funktion wird für Ereignisse verwendet, die durch die IConnectionPoint-Technologie ausgelöst werden. Visual FoxPro bietet keine Unterstützung für das Auslösen von Ereignissen mittels IConnectionPoint.

Die bevorzugte Strategie für die Ereignisbehandlung zwischen COM-Komponenten ist die Verwendung der COM+-Ereignistechnologie, die Teil der COM+-Dienste ist. Mit COM+-Ereignissen können Visual FoxPro-COM-Komponenten auch als Ereignisquellen (Verleger) verwendet werden. Darüber hinaus ermöglichen COM+-Ereignisse eine "lose gekoppelte" Architektur, die es Ereignisabonnenten ermöglicht, so lange inaktiv zu bleiben, bis Ereignisse auftreten.

Unterstützung für frühes Binden

Bestimmte COM-Klassen bieten keine Unterstützung für eine IDispatch-Schnittstelle (spätes Binden). Dies ist häufig der Fall, wenn durch den Aufruf von CreateObject() der OLE-Fehler "Diese Schnittstelle wird nicht unterstützt." zurückgegeben wird. Visual FoxPro ermöglicht es Ihnen nun, durch die Verwendung von Schnittstellen früh gebundener Instanzen mit diesen COM-Komponenten zu arbeiten.

Die CREATEOBJECTEX( )-Funktion bietet Ihnen nun die Möglichkeit, optional einen dritten Parameter anzugeben, der Ihnen das Erstellen einer früh gebundenen Instanz einer COM-Komponente ermöglicht. Um einen Verweis auf ein früh gebundenes Objekt von einem vorhandenen Objekt zurückzugeben, können Sie die neue GETINTERFACE( )-Funktion verwenden.

Typbibliotheken mit expliziter Typangabe

Visual FoxPro ermöglicht die explizite Typangabe, durch die das Schreiben von Code für Methoden in einem DEFINE CLASS-Befehl einfacher und weniger fehleranfällig wird. Bei der expliziten Typangabe können Sie mit Hilfe der AS-Klausel den Datentyp für Parameter und Rückgabewerte von Methoden in den verwendeten COM-Komponenten angeben. Weitere Informationen hierzu finden Sie unter DEFINE CLASS. Zur Laufzeit wird die Typangabe von Visual FoxPro nicht erzwungen. Die explizite Typangabe wird verwendet, wenn die Klassendefinition in einer Typbibliothek (OLEPUBLIC) geschrieben oder Parameterinformationen mit IntelliSense angezeigt werden.

Die explizite Typangabe bietet auch die Möglichkeit, Parameter in Methoden durch Verweis zu übergeben.

Typbibliotheken-Attributsteuerung

Ergänzend zu den expliziten Typangabeinformationen, die in eine Typbibliothek (OLEPUBLIC) geschrieben werden, können Sie mit Hilfe des COMATTRIB-Arrays zusätzliche Typbibliotheksattribute für Eigenschaften und Methoden angeben (weitere Informationen finden Sie unter DEFINE CLASS). Ähnlich wie bei Access- und Assign-Methoden können Sie den COMATTRIB-Namen am Ende einer Eigenschaft oder Methode hinzufügen (beispielsweise MyMethod_COMATTRIB). Mit Hilfe des COMATTRIB-Arrays können Sie erweiterte Typbibliotheksinformationen angeben, z. B. einen Hilfetext, Großschreibung, optionale Parameter oder das Schreibschutzattribut für eine Eigenschaft.

Zurückgeben von Arrays von Methoden

Visual FoxPro ermöglicht es Ihnen, mit Hilfe des @-Operators Arrays direkt von einer Klassenmethode zurückzugeben. Diese Unterstützung wurde in erster Linie für Visual FoxPro-COM-Komponenten hinzugefügt, die möglicherweise mit anderen beispielsweise in Visual Basic oder Visual C++ geschriebenen COM-Komponenten kommunizieren müssen, die eventuell einen Array erwarten, der direkt von einer Methode zurückgegeben wird. Dies kann sich auch auf Methoden auswirken, die mit Hilfe der IMPLEMENTS-Klausel von einer Schnittstelle implementiert wurden.

Elementarrays sollten wie im folgenden Beispiel gezeigt verwendet werden:

   DEFINE CLASS t1 AS custom OLEPUBLIC
      DIMENSION Arrayelement[3]
      FUNCTION GetMyArray() AS array
         this.Arrayelement[1] = 1
         this.Arrayelement[2] = 2   
         this.Arrayelement[3] = 3
         RETURN @THIS.Arrayelement
      ENDFUNC
   ENDDEFINE

Da sich solche Arrays nach dem Methodenaufruf im Gültigkeitsbereich befinden müssen, sind LOCAL- und PRIVATE-Arrays in diesen Deklarationen ungültig. Sie müssen entweder ein PUBLIC-Array oder ein Elementarray verwenden. Diese Unterstützung für Arrays ist für den STORE TO-Befehl nicht verfügbar.

Registrierungsschlüsselbezeichner "FoxRuntime"

Visual FoxPro-COM-Server tragen nun einen neuen Registrierungsschlüssel in der Systemregistrierung ein. Der neue Schlüssel FoxRuntime enthält einen Verweis auf die vom Server verwendete Laufzeitbibliothek. Der neue Registrierungsschlüssel wird folgendermaßen in die Registrierung geschrieben, wobei <guid> auf die GUID (Global Unique Identifier) des Visual FoxPro-COM-Servers verweist:

Key: HKEY_CLASSES_ROOT\CLSID\<guid>\FoxRuntime
Value: VFP7T.DLL

Aktualisierungen der "Session"-Klasse

Aufgrund der Möglichkeit zur Isolierung von Daten in einer privaten Datensitzung ist die Session-Klasse die empfohlene Basisklasse für die Erstellung von Visual FoxPro-COM-Servern. In Visual FoxPro wurden die folgenden Aktualisierungen an dieser Klasse vorgenommen:

  • Integrierte Eigenschaften, Methoden und Ereignisse werden nicht länger in die Typbibliothek geschrieben.
  • Nur von Ihnen angegebene benutzerdefinierte Eigenschaften und Methoden werden geschrieben.
  • In früheren Versionen mussten Sie jedem Element manuell das Attribut HIDDEN zuweisen.
  • Die folgenden SET-Werte verfügen über neue Standardeinstellungen für private Datensitzungen mit der Session-Klasse:
    • EXCLUSIVE = OFF
    • TALK = OFF
    • SAFETY = OFF

Erweiterte Serverfunktionalität

Visual FoxPro bietet eine Reihe neuer Funktionen für die Low-Level-Programmierung mit COM-Komponenten. Die Verwendung dieser Funktionen empfiehlt sich für erfahrene Entwickler, die über fundierte Kenntnisse der Architektur und der Regeln von COM verfügen. Zu diesen Funktionen zählen eine Reihe neuer SYS()-Funktionen.

Die neue COMPROP( )-Funktion ermöglicht es Ihnen, bestimmte Verhaltensweisen einer COM-Komponente zu steuern. Diese Verhaltensweisen können sich von COM-Komponente zu COM-Komponente unterscheiden, so dass häufig umfassende Kenntnisse zu der Komponente notwendig sind, um benannte Eigenschaften mit COMPROP festzulegen. Weitere Informationen finden Sie unter SYS(2336) - Support für wichtige Abschnitte, SYS(2339) - Aufrufen von "CoFreeUnusedLibraries" bei der Freigabe eines COM-Objekts, SYS(2340) - Support für NT-Dienste, SYS(3095) - IDispatch-Zeiger, SYS(3096) - IDispatch-Objektverweis, SYS(3097) - Hinzufügen eines Verweises zu einem Objekt und SYS(3098) - Freigeben eines Objektverweises.

Siehe auch

Automation and COM Servers | COMCLASSINFO( )-Funktion | COMARRAY( )-Funktion