200 likes | 363 Views
COM. Erstellen von COM-Servern in Visual FoxPro 9.0. deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow. Component Object Model.
E N D
COM Erstellen von COM-Servern in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow
Component Object Model • COM (Component Object Model) ist ein Microsoft Standard, der es anderen Applikationen, wie zum Beispiel Active Server Pages oder Microsoft Office erlaubt, auf Funktionalität der eigenen Applikation zuzugreifen • Man kann jedem Client, der COM-Objekte ansprechen kann, über COM beliebige Funktionalität zur Verfügung stellen • Dies gilt also bi-direktional (von/aus VFP)
Bekannte COM-Server I • Microsoft Word und Microsoft Excel • VFP kann auf diese Applikationen als Client problemlos zugreifen, oWord=createobject(„Word.Application“) • Die Funktionalität eines COM-Servers kann man im VFP Objekt Browser sehen • Intellisense unterstützt VFP bzgl. der benötigten Methoden und Eigenschaften z.B. local oExcel as ‚Excel.application‘
Bekannte COM-Server II • Der COM Client (z.B. der Object Browser) kann die verfügbare Funktionalität eines COM-Servers über die sogenannte Type Library erfahren • Indem man andere COM-Server in eigenen VFP Projekten verwendet, kann man VFP-Funktionalität beliebig erweitern. z.B. Excel für alle Rechenaufgaben einsetzen... • Das Ansteuern eines anderen COM-Servers nennt man auch OLE-Automation
COM-Objekt • COM-Server benötigt ein Objekt OLE-Public • Es muss sich nicht um ein Geschäftsobjekt handeln • Sehr oft sind die eigentlichen Geschäftsobjekte nicht wirklich für einen Aufruf von außen geeignet! • Es muss sich um ein Objekt handeln • Zumindest ein Wrapper-Objekt für Funktionen ist notwendig • Basierend auf einer Klasse (Control/Container) • Aufruf via „createobject“ aus anderen Anwendungen • Methoden/Eigenschaften sind sichtbar/modifizierbar und müssen daher geschützt werden (siehe unten)
EXE / DLL (single/multi) • Ein In-Process COM-Server ist eine DLL welche im Speicherbereich des Clients instanziiert wird. Diese COM Server Art kann keine direkte Interaktion mit dem User Interface haben OLE Fehler wird erzeugt • Single Threaded: Jede Clientanwendung erhält eine eigene Instanz des COM Servers • Multi Threaded: Verschiedene Clientanwendung können sich die gleiche Instanz des COM Servers „teilen“ • Details beziehen sich auf Einsatz der COM Server unter MTS/COM+ • Ein Out-of-Process COM-Server ist eine EXE, welche in einem eigenen Speicherbereich läuft. • Dieser COM-Server kann ein User Interface haben!
Type Libraries • Die Type Library ist eine binäre Datei welche alle öffentlichen Klassen des COM Servers mit deren Methoden, Attributen und Events beschreibt. Eine Type Library kann vorliegen als: • Ein eigene binäre Datei (.TLB,.OLB) • Integriert in eine DLL • In eine EXE hineinkompiliert • In ein ActiveX Control integriert • Wenn Sie ein Projekt mit OLEPUBLIC Klassen unter VFP kompilieren erhalten Sie 3 Dateien: • Die DLL oder EXE mit dem Projektnamen • Eine Type Library (.TLB) • Eine Registry Datei (.VBR)
COM-Server Dokumentation • Andere Entwickler welche Ihre Komponenten verwenden, erhalten nur die Information welche Sie in der Description (Beschreibung) abgelegt haben (Klasse, Attribute, Methoden) • COM Server Methoden sollten daher in der Beschreibung enthalten: • Beschreibung der zu übergebenden Parameter • High-Level Beschreibung der Methode • Was macht die Methode • Beschreibung des Return Wertes
Bessere Dokumentation in PRG! • COMATTRIB (nur in PRG Dateien): • Festlegen welchen Status eine Property/Methode hat (nFlags bzw [1]) • Restricted, Hidden, NonBrowsable • Hilfe String festlegen [2] • Gross/Kleinschreibung erhalten (Capitalisation) [3] • PropertyTyp angeben [4] • Anzahl Parameter [5] • Diese Einstellungen wandern nur in die TLB (reine Information) und werden nicht enforced • Es erfolgt also keine tatsächliche Typprüfung o.ä.
Beispiel programmatisch DEFINE CLASS PrgDemo AS Session OLEPUBLIC PROCEDURE GetDateTime RETURN "Timestamp: "+TRANSFORM(DATETIME()) ENDPROC GetDateTime_COMATTRIB = COMATTRIB_NONBROWSABLE iAnzahl = 0 DIMENSION iAnzahl_COMATTRIB[4] iAnzahl_COMATTRIB[1] = COMATTRIB_READONLY iAnzahl_COMATTRIB[2] = „Anzahl der Einträge“ && Hilfe iAnzahl_COMATTRIB[3] = „iAnzahl“ && Gross/Kleinschr. iAnzahl_COMATTRIB[4] = „Integer“ && Typ Angabe ...
Access/Assign und Parameter • Geschützte Methoden / Eigenschaften • Kleine Schnittstelle: Eigenschaften / Methoden ausblenden • Extensive Parameterprüfung in Methoden • Zugriffs-Methoden für Eigenschaften verwenden • Assign- & Access-Methoden • Vartype und gültige Werte (Werteliste, Datum usw.) • Formattierung (Großbuchstaben, Leerzeichen) • Schreibgeschützte Eigenschaften • Ausschließlich interner Zugriff (hidden property switch)
Sonstige Vorbereitungen • Überprüfung des Startmodus INLIST( _vfp.startmode, 2,3,5 ) • Automation Server Unattended Mode ausschalten =SYS(2335,1) • Fehlerbehandlung integrieren =COMRETURNERROR • Sollte auch aus Access/Assign-Methoden aufgerufen werden • Setzen Sie alle Ihre Einstellungen • Uralt: Strg+OK liefert alle Optionen…
Projektdefinition • Hauptprogramm hinzufügen… • Testprogramm eignet sich dafür • Tabellen für Steuerdaten inkludieren • Config.fpw inkludieren • SCREEN = OFF (kein VFP-Desktop sichtbar) • RESOURCE=OFF (keine Anlage Foxuser.dbf) • ALLOWEXTERNAL=ON (zusätzliche config.fpw mögl.) • Sichtbar schalten sofern sinnvoll
Ausführung des COM-Servers • Beispiel in Excel: • Dim loRef as Object • On Error Goto SomeError • Set loRef = createobject(„exe.obj“) • … other operations • Set loRef = Nothing • Excel-Entwickler lieben VFP-Datenzugriff, da er viel einfacher für Sie ist als ODBC/ADO!
TypeLib-Abfrage • Der Object Browser (Objektkatalog) kann Type Libraries auslesen und anzeigen • Informationen zu einem COM-Server können per Drag & Drop in VFP übernommen werden
Registrierung COM-Server • Wenn Sie aus einem VFP Projekt einen COM Server kompilieren, dann werden alle OLE Public Klassen automatisch auf dem lokalen Rechner registriert • Wenn Sie mit den gängigen Installations-tools (Installshield, Wise..) ein Setup erstellen, so werden die COM Komponenten automatisch auf dem Rechner registriert • Sie können dies auch manuell mit Hilfe der Windows Tools RegServer, UnRegServer und RegSrv32 erledigen • Wenn VFP nicht installiert ist, muss zuerst die VFP Runtime installiert werden, damit der COM-Server lauffähig ist!
Auslieferung des COM-Servers • Laufzeitverzeichnis enthält • <IhrServer>.exe • VFP9R.DLL, VFP9RENU.DLL • GDIPLUS.DLL • REGSVR32.EXE • MSVCR71.DLL in system32 • Regsvr32.exe vfp9r.dll • <IhrServer>.exe /regserver
Querverweise • 06-17 Entwickeln und Debuggen von COM Servern
Vielen Dank! Besuchen Sie unsere Webseiten: http://www.dfpug.de, http://portal.dfpug.de, http://forum.dfpug.de, http://newsletter.dfpug.de, http://devcon.dfpug.de, http://roadshow.dfpug.de, http://www.visualextend.de, http://www.linuxtransfer.de, http://www.visualfoxpro.de