1 / 44

Arbeiten mit Libraries

Arbeiten mit Libraries. Arbeiten mit FLL- und DLL-Libraries unter Microsoft Visual FoxPro. Diese Schulung dient der Einführung in das Arbeiten mit FLLs, DLLS (Windows-API-Funktionen) sowie der Einführung in das Erstellen von FLLs mit der API-Bibliothek von Microsoft Visual FoxPro.

avery
Download Presentation

Arbeiten mit Libraries

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Arbeiten mit Libraries Arbeiten mit FLL- und DLL-Libraries unterMicrosoft Visual FoxPro

  2. Diese Schulung dient der Einführung in das Arbeiten mit FLLs, DLLS (Windows-API-Funktionen) sowie der Einführung in das Erstellen von FLLs mit der API-Bibliothek von Microsoft Visual FoxPro

  3. Themenübersicht • Arbeiten mit FLLs • Library-Funktionen, FoxTools-Funktionsübersicht, Probleme • Arbeiten mit DLLs • Deklaration, Parameterübergabe, FILER.DLL/Registrierung • Übersicht über WinAPI-Funktionen • Fenster, System, I/O, INI/Registry, Netzwerk/User, Sonstige • Aufruf WINAPI-Funktionen • Variablenzuordnung, Übernahme, Wertebereiche • Erstellen von FLLs • Dateien, Werteübergabe, Werterückgabe, FOXINFO, FOXTABLE, API-Bibliothek, Vor/Nachteile • FoxPro-API-Bibliothek • API-Bibliothek, Typen, Strukturen, Variablen, Speicherzugriff

  4. Arbeiten mit FLLs Einsetzen von FLLs mit Microsoft Visual FoxPro

  5. Library-Funktionen • SET LIBRARY TO <name> ADDITIVE • SET LIBRARY TO, RELEASE LIBR • 16 / 32 bit-Unterscheidung für FLLs • 16bit-FLL nur in FoxPro/Windows (.PLB in DOS) • 32bit-FLL nur in Visual FoxPro

  6. Allgemein: MsgBox RegFn/RegFn32 CallFn FoxToolVer GetProStrg PutProStrg Strings: Reduce StrFilter Words WordsNum NextWord FoxTools-Funktionen (1)

  7. ClipBoard: GetClipDat/Fmt IsClipFmt EnumClipFm RegClipFmt EmptyClip CountClipF Open/CloseClip Editor: siehe API-Bibliothek Fenster: siehe API-Bibliothek Disk/Datei: Übernommen in neue VFP-Version FoxTools-Funktionen (2)

  8. Mögliche Probleme • Link-Bibliotheken versionsabhängig • von der jeweiligen FPW/VFP-Version! • Ergebnis: Fehler 1711 - Revision mismatch • Ggf. nur eine Instanz (!) • z.B. FOXTOOLS.FLL • gemeinsamer Speicher (unter Windows 95) • Ordinalzahl statt Namensexport • #DEFINE FnA 1 • m.LnFnHandle1 = REGFN((FnA),"C@C","I", "MYTEST.DLL")

  9. Arbeiten mit DLLs Einsatz von Standard-DLLs unter Microsoft Visual FoxPro

  10. DECLARE DLL • DECLARE DLL • Beispiel: Declare Integer GetActiveWindow ; IN Win32API AS GetWinHandl • CLEAR DLLS • (siehe Load/FreeLibrary) • 16 / 32 bit-Unterscheidung FLL/DLL • 16bit-DLL RegFn/CallFn über FoxTools in FoxPro/Windows und Visual FoxPro • 32bit-DLL mit DECLARE nur in Visual FoxPro

  11. Parameterübergabe (1) • Datum immer als Integer (hin/rück) • nDate = val( sys( 11, Date() )) • Logische Werte als BOOL (zurück) • BOOL-Rückgabe: 0=FALSE, #0 = TRUE • VOID / BOOL als Integer (zurück) • 16 / 32 bit-Werte hexadezimal • Arrays als String mit C-Array (Ref.) • Übergabe Strukturen kompliziert

  12. Parameterübergabe (2) • LPSTR = Pointer auf Struktur • „C“ in Namen = Constant (als String deklarieren) • andernfalls mit @ deklarieren und aufrufen (!) • Pointer als Parameter möglich • Pointer in Struktur/auf Funktionen nicht abbildbar • Struktur links = Pointer auf Struktur, geliefert wird String - abgeschnitten bei erster Null (!) • Struktur rechts = Bufferübergabe mit String

  13. Strukturdefinition: typedef struct _SYSTEMTIME { WORD wYear ;WORD wMonth ;WORD wDayOfWeek ; WORD wDay ;WORD wHour ;WORD wMinute ;WORD wSecond ;WORD wMilliseconds ;} SYSTEMTIME Umsetzung in VFP: DECLARE INTEGER ; GetSystemTime ; IN win32api STRING @cBuff=SPACE(40) =GetSystemTime(@cBuff) tYear = ALLTRIM( STR( ASC( ;SUBSTR( cBuff,2))*; 256 + ;ASC( SUBSTR( cBuff,1)))) tMonth = ALLTRIM( STR( ASC( ; SUBSTR(cBuff,4)) * ;256 + ASC(SUBSTR(cBuff,3)))) tDOW = ALLTRIM( STR( ASC( ; SUBSTR( cBuff,6)) * ; 256 + ASC(SUBSTR(cBuff,5)))) Parameterübergabe (3)

  14. FILER.DLL Nachgeliefert als Ersatz für Dateimanager Aufrufbeispiel OLE-Server-DLLs: Registrierung OLE-DLLs mit REGSRV32.EXE ggf. auf .DLL als Aufruf legen... FILER.DLL, Registrierung

  15. WINAPI-Funktionsübersicht Übersicht über Funktionen inWindows-System-DLLs fürMicrosoft Visual FoxPro

  16. WINAPI - Fensterfunktionen • BringWindowToTop • HWND hWnd // handle of window • FindWindow • LPCTSTR lpClassName // address of class name • LPCTSTR lpWindowName // address of window name • GetDesktopWindow • GetParent • ShowWindow

  17. LoadLibrary FreeLibrary GetVersionEx GetLastError SetLastError GetSystemDefault LangID GetCurrencyFormat GetNumberFormat GetDateFormat GetTimeFormat GetTimeZone Information SetLocalTime SetSystemTime WINAPI - Systemfunktionen

  18. GetDriveType siehe Aufstellung GetLogicalDrives siehe Beispiel GetTempFileName GetTempPath GetSystemDirectory GetWindowsDirectory siehe Beispiel 0: Typ konnte nicht festgestellt werden (seltenst der Fall) 1: Das Laufwerk existiert nicht 2: Wechselbar (Disketten, MO, etc. ) 3: "Normale" Festplatte 4: Netzlaufwerk 5: CD-ROM 6: RAM-Disk WINAPI - I/O-Funktionen

  19. INI-Dateien: WritePrivate ProfileSection() WritePrivate ProfileString() GetPrivate ProfileSection() GetPrivate ProfileString() GetPrivateProfileInt() Registry: RegCloseKey() RegCreateKey() RegDeleteKey() RegDeleteValue() RegLoadKey() RegNotifyChangeKeyValue() RegOpenKey() RegQueryInfoKey() RegQueryMultipleValues() RegQueryValue() RegQueryValueEx() RegReplaceKey() RegRestoreKey() RegSaveKey() RegSetValue() INI / Registry - Funktionen

  20. Netzwerk / User - Funktionen • GetUserDefaultLangID • für aktuellen User statt für System • WNetGetUser • NULL-Übergabe für System liefert den User des aktiven Systems • RasDial • umfangreiche Funktionsliste für RAS-Anbindung

  21. WINAPI - Sonstiges • Sleep (Hintergrundprozess) • Beep (Sound-Ausgabe) DECLARE INTEGER Beep IN WIN32API INTEGER, INTEGER *!* DWORD dwFreq, // sound frequency, in hertz *!* DWORD dwDuration // sound duration, in milliseconds ? Beep( 440, 1000 ) • Die Mehrzahl der rund 2000 Funktionen erfordert umfangreiche Strukturen!

  22. WINAPI-Aufrufe Verwendung von Windows-System-DLLs unterMicrosoft Visual FoxPro

  23. Zuordnung zu Variablenarten • #define LPCTSTR STRING (Konstante) • #define LPTSTR STRING@ • #define DWORD INTEGER (Long) • #define LPDWORD INTEGER@ • #define UINT INTEGER (Unsigned Int) • #define LPUINT INTEGER@ (Unsigned Int) • #define LONG INTEGER (32 Bit) • #define BOOL INTEGER • #define VOID INTEGER • #define LPVOID STRING@ (beliebiger Pointer) • #define HANDLE INTEGER (Handle) • #define HWND INTEGER (Handle) • #define HINSTANCE INTEGER (Handle)

  24. Beschreibungen in WINAPI-Hilfe • Vorlage in WINAPI-Hilfe: DWORD WNetGetUser( LPTSTR lpszLocalName, // address of local name to get user name for LPTSTR lpszUserName, // address of buffer for user name LPDWORD lpcchBuffer // address of buffer size variable ); • Visual FoxPro (mit Defines!): DECLARE DWORD WNetGetUser IN WIN32API ; LPTSTR lpszLocalName,; && address of local name to get user name for LPTSTR lpszUserName,; && address of buffer LPDWORD lpcchBuffer && address buffer size variable

  25. Wertebereiche für Variablen • int *2 signed System abhängig (2 Bytes) • unsigned int *2 unsigned System abhängig (2 Bytes) • char 1 signed char -128 bis 127 • unsigned char 1 none 0 bis 255 • short 2 short int -32,768 bis 32,767 • unsigned short 2 ushort int 0 bis 65,535 • long 4 long int -2,147,483,648 bis 2,147,483,647 • unsigned long 4 ulong int 0 bis 4,294,967,295 • enum 2 none -32,768 bis 32,767 • float 4 none 3.4E ± 38 (7 Stellen) • double 8 none 1.7E ± 308 (15 Stellen) • long double 10 none 1.2E ± 4932 (19 Stellen) In VFP sind int/short, unsignd int/unsignd short im Prinzip identisch

  26. Erstellen von FLLs Erstellung von FLLs mit dem Library Construction Kit vonMicrosoft Visual FoxPro

  27. Benötigte Dateien (außer C++) • WINAPIMS.LIB • 1.) alle VFP-Funktionen, die per FLL angesprochen werden können • 2.) etlichen Hilfsfunktionen z.B. für Speichermangagement • Diese Bibliothek wird zu der FLL einfach dazugelinkt • PRO_EXT.H • Deklarationen o.g. Funktionen, wichtige Strukturen, ein paar Konstanten • Einbindung mit: #include <pro_ext.h>

  28. Parameterübergabe • Übergabe Adresse Parameterblock • Enthält Anzahl der Parameter und je Parameter ein Strukturelement mit dem jeweiligen Wert, Ausnahmen: • Referenz-Parameter kommt als Pointer • Stringübergabe als Handle (Adr of Adr) • Hinweis: Datumsübergabe Double (!)

  29. Deklaration als „void“ oder „void far“ - also keine direkten Funktionsresultate Stattdessen Werterückgabe via Funktionsaufruf: _RetChar() _RetCurrency() _RetDateStr() _RetDateTimeStr() _RetFloat() _RetInt() _RetLogical() _RetVal() void EineFunktion(ParamBlk *parm) { _RetChar( "Rückgabe an FoxPro" ); } Werterückgabe

  30. Parameterarten: „“ - kein Parameter „C“ - Charakter „D“ - Datum „I“ - Integer „L“ - Logisch „N“ - Numerisch „R“ - Referenz „T“ - DateTime „Y“ - Währung „O“ - Objekt Feste Funktionen: INTERNAL interne Funktion CALLONLOAD Aufruf beim Laden CALLONUN-LOAD Aufruf beim Entladen (kein Par.) Parameterarten, Funktionen

  31. FOXINFO-Struktur • Name der Funktion unter VFP (Groß) • Name der Funktion in C (Exakt) • Pointer, Type-Cast aus PRO_EXT.H: FPFI • Maximalzahl der Parameter • Typ der Parameter (CSV-Liste, . = opt.) • Beispiel: FoxInfo myFoxInfo[] = { {"VFPFUNKTION",(FPFI) EineFunktion, 2, "I,.C"}, };

  32. FOXTABLE-Struktur • Die eigentliche Verbindung zu FoxPro wird über die Struktur FoxTable hergestellt. FoxPro sucht beim Laden einer FLL diese Struktur und entnimmt ihr alle erforderlichen Informationen. FoxTable _FoxTable = { (FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo }; Die Sizeof-Berechnungen dienen nur der (dadurch auch bei Strukturänderungen immer korrekten) Berechnung der Anzahl der Einträge innerhalb der FoxInfo-Struktur, m.a.W. der Anzahl der exportierten Funktionen

  33. Template für C / C++ • #include <pro_ext.h>void Internal_Name(ParamBlk *parm){// function code goes here.}FoxInfo myFoxInfo[] = {{"FUNC_NAME", (FPFI) Internal_Name, 0, ""},};extern "C“ { <== für C++FoxTable _FoxTable = {(FoxTable *)0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo};} <== für C++

  34. Vorteile: Alle Funktionen von VFP in C verfügbar (seek, wait wind usw.) Keine Deklaration notwendig (Direkt-aufruf möglich) Nachteile: Können nur von FoxPro verwendet werden FLL ohne Rückgabe kann mit Rückgabe deklariert werden (Endung als DLL) Vor-/Nachteile von FLLs

  35. FoxPro-API-Bibliothek Die API-Bibliothek von Microsoft Visual FoxPro

  36. _Activate _Alloc (Speicher) _DB (*) (Datenbank) _Deactivate _Dialog (Message) _Dispose (Löschen) _Ed (*) (Editor) _Error/_ErrorInfo _Evaluate (!) _Execute (!) _F (*) (LowLevel) _Find (Objektsuche) _Free (Freigabe) _Get (Information) API-Bibliothek (1)

  37. _GetItem (Handle) _Global (Variablen) _H (DB-Header) _Mem (Speicher) _Menu (Menü) _Memo (Memo) _Mouse (Maus) _New (Neuanlage) _Object _Put (Ausgabe) _Ret (Rückgabe) _Set (Einstellung) _Str (Konversion) _W (*) (Fenster) API-Bibliothek (2)

  38. API-Datentypen • EDLINE - Zeilennummer Editfenster • EDPOS - Zeichenposition dito • FCHAN - Low-Level-File-Handle • FPFI - Funktionspointer (Integer) • ITEMID - Identifier Menüeintrag • MENUID - Identifier Menü • MHANDLE - Identifier Speicherblock • NTI - Name-Table-Index • WHANDLE - Fenster-Handle

  39. API-Datenstrukturen • EventRec - Ereignisstruktur • FoxInfo - siehe oben • FoxTable - siehe oben • Locator - Übergabe Parameter • ParamBlk - siehe oben • Parameter - Übergabe Parameter Ref. • Point - Koordinaten • Rect - Koordinaten Rechteck • Value - Übergabe Parameter Wert

  40. API-Variablen-Zugriff • NTI = Name Table Index (Array) • _NameTableIndex( ) für Suche • _Load( ) = Lesen • _Store( ) = Schreiben • _NewVar( )= neue Variable • _Release( ) = Variable löschen

  41. API-Speicher-Zugriff • Speicherzugriff über Handles • Handle ist ein Index in ein Array von Pointer auf Speicher • Zugriffsfunktionen unter C: • _AllocHandle( ) • _HLock( ) • _HandToPtr( ) • *-- Verwendung • _HUnLock( ) • Hinweis: _AllocMemo( ) für Memofelder (!)

  42. Fragestellungen • Auswahl und Einsatz von FLLs • Auswahl und Einsatz von DLLs • Einsatz von WIN-API-Funktionen • Selbsterstellung von FLLs mit API

  43. Vielen Dank! Das waren die Themen: • Arbeiten mit FLLs • Library, FoxTools-Übersicht, Probleme • Arbeiten mit DLLs • Deklaration, Parameter-übergabe, FILER/OLE • WinAPI-Funktionen • Fenster, System, I/O, INI/Registry, Netzwerk/User, Sonstige • Variablenzuordnung, Übernahme, Wertebereiche • Erstellen von FLLs • Dateien, Werteübergabe, Werterückgabe, FOXINFO, FOXTABLE, API-Bibliothek, Vor/Nachteile • FoxPro-API-Bibliothek • API-Bibliothek, Typen, Strukturen, Variablen, Speicherzugriff

  44. Wenn Fragen bestehen: Wizards & Builders Methodische Software-Entwicklung GmbH Frankfurter Str. 21b 61476 Kronberg Tel.: 06173-950906 Fax: 06173-950907 CIS: 101605,175

More Related