COM-ServerCOM-Serverin Visual FoxPro 9.0in Visual FoxPro 9.0
deutschsprachige FoxPro User Groupdeutschsprachige FoxPro User Group
Rainer BeckerRainer Becker
Microsoft Visual FoxPro 9.0 WebCastMicrosoft Visual FoxPro 9.0 WebCast
COM
Teil 9: Arbeiten mit COM-ServerTeil 9: Arbeiten mit COM-Server
Mittwoch, 12.10.2005, 16:00 – 17:00 UhrMittwoch, 12.10.2005, 16:00 – 17:00 Uhr Beschreibung: Auch wenn Visual FoxPro optimal für Beschreibung: Auch wenn Visual FoxPro optimal für
die schnelle Erstellung von schnellen Benutzer-die schnelle Erstellung von schnellen Benutzer-oberflächen für Datenbanken ist, also für die oberflächen für Datenbanken ist, also für die Erstellung klassischer 2-Schichten-Anwendungen, Erstellung klassischer 2-Schichten-Anwendungen, besteht die einfache Möglichkeit, auch COM-Server besteht die einfache Möglichkeit, auch COM-Server zu erstellen. Selbige können in einem weiteren Schritt zu erstellen. Selbige können in einem weiteren Schritt in Webservices umgewandelt werden (siehe Folge-in Webservices umgewandelt werden (siehe Folge-WebCast). Wir zeigen Ihnen in diesem Webcast, was WebCast). Wir zeigen Ihnen in diesem Webcast, was dafür notwendig ist. dafür notwendig ist.
Rainer BeckerRainer Becker
dFPUGdFPUG Online-AngeboteOnline-Angebote LoseblattsammlungLoseblattsammlung
VFP-EntwicklerkonferenzVFP-Entwicklerkonferenz VFP-LokalisierungVFP-Lokalisierung Framework Visual ExtendFramework Visual Extend MVP, MCP, ISVMVP, MCP, ISV Wizards & Builders GmbHWizards & Builders GmbH
Wie bekomme ich VFP ?Wie bekomme ich VFP ?
Update von 6.0, 7.0, 8.0 sowie VS 97Update von 6.0, 7.0, 8.0 sowie VS 97 Nicht von VFP 5.0 oder früherNicht von VFP 5.0 oder früher
Internationale und US/Canada-VersionInternationale und US/Canada-Version Preisunterschied durch DollarverfallPreisunterschied durch Dollarverfall Technisch identischTechnisch identisch Kein Support / Marketingbudget für US-Version in BRDKein Support / Marketingbudget für US-Version in BRD
dFPUG bietet exklusiv „Deutsche Version“dFPUG bietet exklusiv „Deutsche Version“ Benutzeroberfläche, Berichtsdesigner, WerkzeugeBenutzeroberfläche, Berichtsdesigner, Werkzeuge
VortragsthemenVortragsthemen COM AllgemeinCOM Allgemein COM-Objekt / OLEPublicCOM-Objekt / OLEPublic Erstellung von EXE oder DLLErstellung von EXE oder DLL Type Library / DokumentationType Library / Dokumentation ErstellungErstellung RegistrierungRegistrierung AuslieferungAuslieferung ProgrammierhinweiseProgrammierhinweise
Component Object ModelComponent Object Model
COM (Component Object Model) ist ein Microsoft COM (Component Object Model) ist ein Microsoft Standard, der es anderen Applikationen, wie zum Standard, der es anderen Applikationen, wie zum Beispiel Active Server Pages oder Microsoft Office Beispiel Active Server Pages oder Microsoft Office erlaubt, auf Funktionalität der eigenen Applikation erlaubt, auf Funktionalität der eigenen Applikation zuzugreifenzuzugreifen
Man kann jedem Client, der COM-Objekte Man kann jedem Client, der COM-Objekte ansprechen kann, über COM beliebige Funktionalität ansprechen kann, über COM beliebige Funktionalität zur Verfügung stellenzur Verfügung stellen
Dies gilt also bi-direktional (von/aus VFP)Dies gilt also bi-direktional (von/aus VFP)
Bekannte COM-Server IBekannte COM-Server I
Microsoft Word und Microsoft ExcelMicrosoft Word und Microsoft Excel VFP kann auf diese Applikationen als Client VFP kann auf diese Applikationen als Client
problemlos zugreifen, problemlos zugreifen, oWord=oWord=createobject(„Word.Application“)createobject(„Word.Application“)
Die Funktionalität eines COM-Servers kann man im Die Funktionalität eines COM-Servers kann man im VFP Objekt Browser sehenVFP Objekt Browser sehen
Intellisense unterstützt VFP bzgl. der benötigten Intellisense unterstützt VFP bzgl. der benötigten Methoden und Eigenschaften z.B. local oExcel as Methoden und Eigenschaften z.B. local oExcel as ‚Excel.application‘‚Excel.application‘
Bekannte COM-Server IIBekannte COM-Server II
Der COM Client (z.B. der Object Browser) kann die Der COM Client (z.B. der Object Browser) kann die verfügbare Funktionalität eines COM-Servers über verfügbare Funktionalität eines COM-Servers über die sogenannte Type Library erfahrendie sogenannte Type Library erfahren
Indem man andere COM-Server in eigenen VFP Indem man andere COM-Server in eigenen VFP Projekten verwendet, kann man VFP-Funktionalität Projekten verwendet, kann man VFP-Funktionalität beliebig erweitern. z.B. Excel für alle beliebig erweitern. z.B. Excel für alle Rechenaufgaben einsetzen...Rechenaufgaben einsetzen...
Das Ansteuern eines anderen COM-Servers nennt Das Ansteuern eines anderen COM-Servers nennt man auch OLE-Automationman auch OLE-Automation
COM-ObjektCOM-Objekt
COM-Server benötigt ein Objekt OLE-Public COM-Server benötigt ein Objekt OLE-Public Es muss sich nicht um ein Geschäftsobjekt handelnEs muss sich nicht um ein Geschäftsobjekt handeln
Sehr oft sind die eigentlichen Geschäftsobjekte nicht wirklich für Sehr oft sind die eigentlichen Geschäftsobjekte nicht wirklich für einen Aufruf von außen geeignet!einen Aufruf von außen geeignet!
Es muss sich um ein Objekt handelnEs muss sich um ein Objekt handeln Zumindest ein Wrapper-Objekt für Funktionen ist notwendigZumindest ein Wrapper-Objekt für Funktionen ist notwendig
Basierend auf einer Klasse (Control/Container)Basierend auf einer Klasse (Control/Container) Aufruf via „createobject“ aus anderen AnwendungenAufruf via „createobject“ aus anderen Anwendungen Methoden/Eigenschaften sind sichtbar/modifizierbar und Methoden/Eigenschaften sind sichtbar/modifizierbar und
müssen daher geschützt werden (siehe unten)müssen daher geschützt werden (siehe unten)
OLE Public / ErstellungsoptionenOLE Public / Erstellungsoptionen
EXE / DLL (single/multi)EXE / DLL (single/multi) Ein In-Process COM-Server ist eine DLL welche im Ein In-Process COM-Server ist eine DLL welche im
Speicherbereich des Clients instanziiert wird. Diese COM Speicherbereich des Clients instanziiert wird. Diese COM Server Art kann Server Art kann keinekeine direkte Interaktion mit dem User direkte Interaktion mit dem User Interface haben Interface haben OLE Fehler wird erzeugt OLE Fehler wird erzeugt Single Threaded: Single Threaded: Jede Clientanwendung erhält eine eigene Jede Clientanwendung erhält eine eigene
Instanz des COM ServersInstanz des COM Servers Multi Threaded: Multi Threaded: Verschiedene Clientanwendung können sich Verschiedene Clientanwendung können sich
die gleiche Instanz des COM Servers „teilen“die gleiche Instanz des COM Servers „teilen“ Details beziehen sich auf Einsatz der COM Server unter MTS/COM+Details beziehen sich auf Einsatz der COM Server unter MTS/COM+
Ein Out-of-Process COM-Server ist eine EXE, welche in Ein Out-of-Process COM-Server ist eine EXE, welche in einem eigenen Speicherbereich läuft. einem eigenen Speicherbereich läuft. Dieser COM-Server kann ein User Interface haben!Dieser COM-Server kann ein User Interface haben!
Type LibrariesType Libraries Die Type Library ist eine binäre Datei welche alle öffentlichen Die Type Library ist eine binäre Datei welche alle öffentlichen
Klassen des COM Servers mit deren Methoden, Attributen Klassen des COM Servers mit deren Methoden, Attributen und Events beschreibt. Eine Type Library kann vorliegen als:und Events beschreibt. Eine Type Library kann vorliegen als:
Ein eigene binäre Datei (.TLB,.OLB)Ein eigene binäre Datei (.TLB,.OLB) Integriert in eine DLLIntegriert in eine DLL In eine EXE hineinkompiliertIn eine EXE hineinkompiliert In ein ActiveX Control integriertIn ein ActiveX Control integriert
Wenn Sie ein Projekt mit OLEPUBLIC Klassen unter VFP Wenn Sie ein Projekt mit OLEPUBLIC Klassen unter VFP kompilieren erhalten Sie 3 Dateien:kompilieren erhalten Sie 3 Dateien: Die DLL oder EXE mit dem ProjektnamenDie DLL oder EXE mit dem Projektnamen Eine Type Library (.TLB)Eine Type Library (.TLB) Eine Registry Datei (.VBR)Eine Registry Datei (.VBR)
COM-Server DokumentationCOM-Server Dokumentation
Andere Entwickler welche Ihre Komponenten verwenden, Andere Entwickler welche Ihre Komponenten verwenden, erhalten nur die Information welche Sie in der Description erhalten nur die Information welche Sie in der Description (Beschreibung) abgelegt haben (Klasse, Attribute, Methoden)(Beschreibung) abgelegt haben (Klasse, Attribute, Methoden)
COM Server Methoden sollten daher in der Beschreibung COM Server Methoden sollten daher in der Beschreibung enthalten:enthalten: Beschreibung der zu übergebenden ParameterBeschreibung der zu übergebenden Parameter High-Level Beschreibung der MethodeHigh-Level Beschreibung der Methode Was macht die MethodeWas macht die Methode Beschreibung des Return WertesBeschreibung des Return Wertes
Bessere Dokumentation in PRG!Bessere Dokumentation in PRG! COMATTRIB (nur in PRG Dateien):COMATTRIB (nur in PRG Dateien):
Festlegen welchen Status eine Property/Methode hat Festlegen welchen Status eine Property/Methode hat (nFlags bzw [1]) (nFlags bzw [1])
Restricted, Hidden, NonBrowsableRestricted, Hidden, NonBrowsable Hilfe String festlegen [2]Hilfe String festlegen [2] Gross/Kleinschreibung erhalten (Capitalisation) [3]Gross/Kleinschreibung erhalten (Capitalisation) [3] PropertyTyp angeben [4]PropertyTyp angeben [4] Anzahl Parameter [5]Anzahl Parameter [5]
Diese Einstellungen wandern nur in die TLB (reine Diese Einstellungen wandern nur in die TLB (reine Information) und werden nicht enforcedInformation) und werden nicht enforced Es erfolgt also keine tatsächliche Typprüfung o.ä.Es erfolgt also keine tatsächliche Typprüfung o.ä.
Beispiel programmatischBeispiel programmatischDEFINE CLASS PrgDemo AS Session OLEPUBLICDEFINE CLASS PrgDemo AS Session OLEPUBLIC
PROCEDURE GetDateTimePROCEDURE GetDateTimeRETURN "Timestamp: "+TRANSFORM(DATETIME())RETURN "Timestamp: "+TRANSFORM(DATETIME())
ENDPROCENDPROCGetDateTime_COMATTRIB = COMATTRIB_NONBROWSABLEGetDateTime_COMATTRIB = COMATTRIB_NONBROWSABLE
iAnzahl = 0iAnzahl = 0
DIMENSION iAnzahl_COMATTRIB[4] DIMENSION iAnzahl_COMATTRIB[4] iAnzahl_COMATTRIB[1] = COMATTRIB_READONLYiAnzahl_COMATTRIB[1] = COMATTRIB_READONLYiAnzahl_COMATTRIB[2] = „Anzahl der Einträge“ && HilfeiAnzahl_COMATTRIB[2] = „Anzahl der Einträge“ && HilfeiAnzahl_COMATTRIB[3] = „iAnzahl“ && Gross/Kleinschr.iAnzahl_COMATTRIB[3] = „iAnzahl“ && Gross/Kleinschr.iAnzahl_COMATTRIB[4] = „Integer“ && Typ AngabeiAnzahl_COMATTRIB[4] = „Integer“ && Typ Angabe......
Access/Assign und ParameterAccess/Assign und Parameter
Geschützte Methoden / EigenschaftenGeschützte Methoden / Eigenschaften Kleine Schnittstelle: Eigenschaften / Methoden ausblendenKleine Schnittstelle: Eigenschaften / Methoden ausblenden Extensive Parameterprüfung in MethodenExtensive Parameterprüfung in Methoden Zugriffs-Methoden für Eigenschaften verwendenZugriffs-Methoden für Eigenschaften verwenden
Assign- & Access-MethodenAssign- & Access-Methoden Vartype und gültige Werte (Werteliste, Datum usw.)Vartype und gültige Werte (Werteliste, Datum usw.) Formattierung (Großbuchstaben, Leerzeichen)Formattierung (Großbuchstaben, Leerzeichen) Schreibgeschützte EigenschaftenSchreibgeschützte Eigenschaften Ausschließlich interner Zugriff (hidden property switch)Ausschließlich interner Zugriff (hidden property switch)
Sonstige VorbereitungenSonstige Vorbereitungen
Überprüfung des StartmodusÜberprüfung des StartmodusINLIST( _vfp.startmode, 2,3,5 )INLIST( _vfp.startmode, 2,3,5 )
Automation Server Unattended Mode ausschaltenAutomation Server Unattended Mode ausschalten=SYS(2335,1)=SYS(2335,1)
Fehlerbehandlung integrierenFehlerbehandlung integrieren=COMRETURNERROR=COMRETURNERROR
Sollte auch aus Access/Assign-Methoden aufgerufen werdenSollte auch aus Access/Assign-Methoden aufgerufen werden
Setzen Sie alle Ihre Einstellungen Setzen Sie alle Ihre Einstellungen Uralt: Strg+OK liefert alle Optionen…Uralt: Strg+OK liefert alle Optionen…
ProjektdefinitionProjektdefinition
Hauptprogramm hinzufügen…Hauptprogramm hinzufügen… Testprogramm eignet sich dafürTestprogramm eignet sich dafür
Tabellen für Steuerdaten inkludierenTabellen für Steuerdaten inkludieren Config.fpw inkludierenConfig.fpw inkludieren
SCREEN = OFFSCREEN = OFF (kein VFP-Desktop sichtbar) (kein VFP-Desktop sichtbar) RESOURCE=OFFRESOURCE=OFF (keine Anlage Foxuser.dbf) (keine Anlage Foxuser.dbf) ALLOWEXTERNAL=ON (zusätzliche config.fpw mögl.)ALLOWEXTERNAL=ON (zusätzliche config.fpw mögl.)
Sichtbar schalten sofern sinnvollSichtbar schalten sofern sinnvoll
Ausführung des COM-ServersAusführung des COM-Servers
Beispiel in Excel:Beispiel in Excel: Dim loRef as ObjectDim loRef as Object On Error Goto SomeErrorOn Error Goto SomeError Set loRef = createobject(„exe.obj“)Set loRef = createobject(„exe.obj“) … … other operationsother operations Set loRef = NothingSet loRef = Nothing
Excel-Entwickler lieben VFP-Datenzugriff, da er viel Excel-Entwickler lieben VFP-Datenzugriff, da er viel einfacher für Sie ist als ODBC/ADO!einfacher für Sie ist als ODBC/ADO!
TypeLib-AbfrageTypeLib-Abfrage
Der Object Browser Der Object Browser (Objektkatalog) kann Type (Objektkatalog) kann Type Libraries auslesen und Libraries auslesen und anzeigenanzeigen
Informationen zu einem Informationen zu einem COM-Server können per COM-Server können per Drag & Drop in VFP Drag & Drop in VFP übernommen werden übernommen werden
Registrierung COM-ServerRegistrierung COM-Server
Wenn Sie aus einem VFP Projekt einen COM Server Wenn Sie aus einem VFP Projekt einen COM Server kompilieren, dann werden alle OLE Public Klassen kompilieren, dann werden alle OLE Public Klassen automatisch auf dem automatisch auf dem lokalenlokalen Rechner registriert Rechner registriert
Wenn Sie mit den gängigen Installations-tools (Installshield, Wenn Sie mit den gängigen Installations-tools (Installshield, Wise..) ein Setup erstellen, so werden die COM Komponenten Wise..) ein Setup erstellen, so werden die COM Komponenten automatisch auf dem Rechner registriertautomatisch auf dem Rechner registriert
Sie können dies auch manuell mit Hilfe der Windows Tools Sie können dies auch manuell mit Hilfe der Windows Tools RegServer, UnRegServer und RegSrv32 erledigenRegServer, UnRegServer und RegSrv32 erledigen
Wenn VFP nicht installiert ist, muss zuerst die VFP Runtime Wenn VFP nicht installiert ist, muss zuerst die VFP Runtime installiert werden, damit der COM-Server lauffähig ist!installiert werden, damit der COM-Server lauffähig ist!
Auslieferung des COM-ServersAuslieferung des COM-Servers
Laufzeitverzeichnis enthältLaufzeitverzeichnis enthält <IhrServer>.exe<IhrServer>.exe VFP9R.DLL, VFP9RENU.DLLVFP9R.DLL, VFP9RENU.DLL GDIPLUS.DLLGDIPLUS.DLL REGSVR32.EXEREGSVR32.EXE
MSVCR71.DLL in system32MSVCR71.DLL in system32 Regsvr32.exe vfp9r.dllRegsvr32.exe vfp9r.dll <IhrServer>.exe /regserver<IhrServer>.exe /regserver
QuerverweiseQuerverweise
06-17 Entwickeln und Debuggen von COM Servern06-17 Entwickeln und Debuggen von COM Servern
Weiterführendes MaterialWeiterführendes Material
Visual FoxPro 9.0Visual FoxPro 9.0 UpdatebuchUpdatebuch Roadshow-CDRoadshow-CD Lokalisierungs-CDLokalisierungs-CD
Visual FoxPro 8.0Visual FoxPro 8.0 UpdatebuchUpdatebuch Deutsche HilfedateiDeutsche Hilfedatei
Online-Angebote der dFPUGOnline-Angebote der dFPUG Forum, Portal, eNewsletter, Homepage, WikiForum, Portal, eNewsletter, Homepage, Wiki
Teil 10: Arbeiten mit WebServicesTeil 10: Arbeiten mit WebServices
Mittwoch, 19.10.2005, 16:00 – 17:00 UhrMittwoch, 19.10.2005, 16:00 – 17:00 Uhr Beschreibung: Gerne wird Visual FoxPro für die Beschreibung: Gerne wird Visual FoxPro für die
schnelle Anwendungsentwicklung von Desktop-schnelle Anwendungsentwicklung von Desktop-Applikationen oder von Client/Server-Applikationen Applikationen oder von Client/Server-Applikationen verwendet. Aber auch die Erstellung von verwendet. Aber auch die Erstellung von WebServices stellt mit dieser leistungsfähigen WebServices stellt mit dieser leistungsfähigen Entwicklungsumgebung keinerlei Problem dar! Die Entwicklungsumgebung keinerlei Problem dar! Die schnellen Datenbank- und Stringfunktionen erlauben schnellen Datenbank- und Stringfunktionen erlauben die leichte Erstellung von performanten Diensten für die leichte Erstellung von performanten Diensten für eine verteilte Anwendung. eine verteilte Anwendung.
Vielen Dank!Vielen Dank!
Fragen an [email protected] an [email protected] (besser) http://forum.dfpug.de oder (besser) http://forum.dfpug.de
Besuchen Sie unsere Webseiten: Besuchen Sie unsere Webseiten: http://www.dfpug.dehttp://www.dfpug.de, , http://portal.dfpug.dehttp://portal.dfpug.de, , http://forum.dfpug.dehttp://forum.dfpug.de, ,
http://newsletter.dfpug.dehttp://newsletter.dfpug.de, , http://devcon.dfpug.dehttp://devcon.dfpug.de, , http://roadshow.dfpug.de, http://www.visualextend.de, http://roadshow.dfpug.de, http://www.visualextend.de,
http://www.linuxtransfer.de, http://www.visualfoxpro.de http://www.linuxtransfer.de, http://www.visualfoxpro.de