Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft...

44
Wizards & Wizards & Builders Builders GmbH GmbH Arbeiten mit Libraries Arbeiten mit Libraries Arbeiten mit FLL- und Arbeiten mit FLL- und DLL-Libraries unter DLL-Libraries unter Microsoft Visual FoxPro Microsoft Visual FoxPro

Transcript of Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft...

Page 1: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Arbeiten mit LibrariesArbeiten mit Libraries

Arbeiten mit FLL- und DLL-Arbeiten mit FLL- und DLL-Libraries unterLibraries unter

Microsoft Visual FoxProMicrosoft Visual FoxPro

Page 2: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

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

Page 3: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

ThemenübersichtThemenübersicht

Arbeiten mit FLLsArbeiten mit FLLs Library-Funktionen, FoxTools-Funktionsübersicht, ProblemeLibrary-Funktionen, FoxTools-Funktionsübersicht, Probleme

Arbeiten mit DLLsArbeiten mit DLLs Deklaration, Parameterübergabe, FILER.DLL/RegistrierungDeklaration, Parameterübergabe, FILER.DLL/Registrierung

Übersicht über WinAPI-FunktionenÜbersicht über WinAPI-Funktionen Fenster, System, I/O, INI/Registry, Netzwerk/User, SonstigeFenster, System, I/O, INI/Registry, Netzwerk/User, Sonstige

Aufruf WINAPI-FunktionenAufruf WINAPI-Funktionen Variablenzuordnung, Übernahme, WertebereicheVariablenzuordnung, Übernahme, Wertebereiche

Erstellen von FLLsErstellen von FLLs Dateien, Werteübergabe, Werterückgabe, FOXINFO, Dateien, Werteübergabe, Werterückgabe, FOXINFO,

FOXTABLE, API-Bibliothek, Vor/NachteileFOXTABLE, API-Bibliothek, Vor/Nachteile

FoxPro-API-BibliothekFoxPro-API-Bibliothek API-Bibliothek, Typen, Strukturen, Variablen, SpeicherzugriffAPI-Bibliothek, Typen, Strukturen, Variablen, Speicherzugriff

Page 4: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Arbeiten mit FLLsArbeiten mit FLLs

Einsetzen von FLLs mitEinsetzen von FLLs mit

Microsoft Visual FoxProMicrosoft Visual FoxPro

Page 5: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Library-FunktionenLibrary-Funktionen

SET LIBRARY TO <name> ADDITIVESET LIBRARY TO <name> ADDITIVE SET LIBRARY TO, RELEASE LIBRSET LIBRARY TO, RELEASE LIBR

16 / 32 bit-Unterscheidung für FLLs16 / 32 bit-Unterscheidung für FLLs 16bit-FLL nur in FoxPro/Windows (.PLB in DOS)16bit-FLL nur in FoxPro/Windows (.PLB in DOS) 32bit-FLL nur in Visual FoxPro32bit-FLL nur in Visual FoxPro

Page 6: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

FoxTools-Funktionen (1)FoxTools-Funktionen (1)

Allgemein:Allgemein: MsgBoxMsgBox RegFn/RegFn32RegFn/RegFn32 CallFnCallFn FoxToolVerFoxToolVer GetProStrgGetProStrg PutProStrgPutProStrg

Strings:Strings: ReduceReduce StrFilterStrFilter WordsWords WordsNumWordsNum NextWordNextWord

Page 7: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

FoxTools-Funktionen (2)FoxTools-Funktionen (2)

ClipBoard:ClipBoard: GetClipDat/FmtGetClipDat/Fmt IsClipFmtIsClipFmt EnumClipFmEnumClipFm RegClipFmtRegClipFmt EmptyClipEmptyClip CountClipFCountClipF Open/CloseClipOpen/CloseClip

Editor:Editor: siehe API-Bibliotheksiehe API-Bibliothek

Fenster:Fenster: siehe API-Bibliotheksiehe API-Bibliothek

Disk/Datei:Disk/Datei: Übernommen in neue Übernommen in neue

VFP-VersionVFP-Version

Page 8: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Mögliche ProblemeMögliche Probleme

Link-Bibliotheken Link-Bibliotheken versionsabhängigversionsabhängig von der jeweiligen FPW/VFP-Version!von der jeweiligen FPW/VFP-Version! Ergebnis: Fehler 1711 - Revision mismatchErgebnis: Fehler 1711 - Revision mismatch

Ggf. nur eine Instanz (!)Ggf. nur eine Instanz (!) z.B. FOXTOOLS.FLLz.B. FOXTOOLS.FLL gemeinsamer Speicher (unter Windows 95)gemeinsamer Speicher (unter Windows 95)

Ordinalzahl statt NamensexportOrdinalzahl statt Namensexport #DEFINE FnA 1#DEFINE FnA 1 m.LnFnHandle1 = REGFN((FnA),"C@C","I", "MYTEST.DLL")m.LnFnHandle1 = REGFN((FnA),"C@C","I", "MYTEST.DLL")

Page 9: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Arbeiten mit DLLsArbeiten mit DLLs

Einsatz von Standard-DLLs Einsatz von Standard-DLLs unter unter

Microsoft Visual FoxProMicrosoft Visual FoxPro

Page 10: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

DECLARE DLLDECLARE DLL

DECLARE DLLDECLARE DLL Beispiel: Beispiel: Declare Integer GetActiveWindow ;Declare Integer GetActiveWindow ;

IN Win32API AS GetWinHandl IN Win32API AS GetWinHandl

CLEAR DLLSCLEAR DLLS (siehe Load/FreeLibrary)(siehe Load/FreeLibrary)

16 / 32 bit-Unterscheidung FLL/DLL16 / 32 bit-Unterscheidung FLL/DLL 16bit-DLL RegFn/CallFn über FoxTools in 16bit-DLL RegFn/CallFn über FoxTools in

FoxPro/Windows und Visual FoxProFoxPro/Windows und Visual FoxPro 32bit-DLL mit DECLARE nur in Visual FoxPro32bit-DLL mit DECLARE nur in Visual FoxPro

Page 11: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Parameterübergabe (1)Parameterübergabe (1)

Datum immer als Integer (hin/rück)Datum immer als Integer (hin/rück) nDate = val( sys( 11, Date() ))nDate = val( sys( 11, Date() ))

Logische Werte als BOOL (zurück)Logische Werte als BOOL (zurück) BOOL-Rückgabe: 0=FALSE, #0 = TRUEBOOL-Rückgabe: 0=FALSE, #0 = TRUE

VOID / BOOL als Integer (zurück)VOID / BOOL als Integer (zurück) 16 / 32 bit-Werte hexadezimal16 / 32 bit-Werte hexadezimal Arrays als String mit C-Array (Ref.)Arrays als String mit C-Array (Ref.) Übergabe Strukturen kompliziertÜbergabe Strukturen kompliziert

Page 12: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Parameterübergabe (2)Parameterübergabe (2)

LPSTR = Pointer auf StrukturLPSTR = Pointer auf Struktur „„C“ in Namen = Constant (als String C“ in Namen = Constant (als String

deklarieren)deklarieren) andernfalls mit @ deklarieren andernfalls mit @ deklarieren undund aufrufen (!) aufrufen (!)

Pointer als Parameter möglichPointer als Parameter möglich Pointer in Struktur/auf Funktionen nicht Pointer in Struktur/auf Funktionen nicht

abbildbarabbildbar Struktur links = Pointer auf Struktur, geliefert Struktur links = Pointer auf Struktur, geliefert

wird String - abgeschnitten bei erster Null (!)wird String - abgeschnitten bei erster Null (!) Struktur rechts = Bufferübergabe mit StringStruktur rechts = Bufferübergabe mit String

Page 13: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Parameterübergabe (3)Parameterübergabe (3)

Strukturdefinition:Strukturdefinition: typedef struct

_SYSTEMTIME { WORD wYear ;WORD wMonth ;WORD wDayOfWeek ; WORD wDay ;WORD wHour ;WORD wMinute ;WORD wSecond ;WORD wMilliseconds ;} SYSTEMTIME

Umsetzung in VFP: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))))

Page 14: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

FILER.DLL, RegistrierungFILER.DLL, Registrierung

FILER.DLLFILER.DLL Nachgeliefert Nachgeliefert

als Ersatz für als Ersatz für DateimanagerDateimanager

AufrufbeispielAufrufbeispiel

OLE-Server-DLLs:OLE-Server-DLLs: Registrierung Registrierung

OLE-DLLs mit OLE-DLLs mit REGSRV32.EXEREGSRV32.EXE

ggf. auf .DLL ggf. auf .DLL als Aufruf als Aufruf legen...legen...

Page 15: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

WINAPI-WINAPI-FunktionsübersichtFunktionsübersicht

Übersicht über Funktionen inÜbersicht über Funktionen inWindows-System-DLLs fürWindows-System-DLLs für

Microsoft Visual FoxProMicrosoft Visual FoxPro

Page 16: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

WINAPI - FensterfunktionenWINAPI - Fensterfunktionen

BringWindowToTopBringWindowToTop HWND hWnd HWND hWnd // handle of window// handle of window

FindWindowFindWindow LPCTSTR lpClassNameLPCTSTR lpClassName // address of class name// address of class name LPCTSTR lpWindowName LPCTSTR lpWindowName // address of window name// address of window name

GetDesktopWindowGetDesktopWindow GetParentGetParent ShowWindowShowWindow

Page 17: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

WINAPI - SystemfunktionenWINAPI - Systemfunktionen

LoadLibraryLoadLibrary FreeLibraryFreeLibrary GetVersionExGetVersionEx GetLastErrorGetLastError SetLastErrorSetLastError GetSystemDefault GetSystemDefault

LangIDLangID

GetCurrencyFormatGetCurrencyFormat GetNumberFormatGetNumberFormat GetDateFormatGetDateFormat GetTimeFormatGetTimeFormat GetTimeZone GetTimeZone

InformationInformation SetLocalTimeSetLocalTime SetSystemTimeSetSystemTime

Page 18: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

WINAPI - I/O-FunktionenWINAPI - I/O-Funktionen

GetDriveTypeGetDriveType siehe Aufstellungsiehe Aufstellung

GetLogicalDrivesGetLogicalDrives siehe Beispielsiehe Beispiel

GetTempFileNameGetTempFileName GetTempPathGetTempPath GetSystemDirectoryGetSystemDirectory GetWindowsDirectoryGetWindowsDirectory

siehe Beispielsiehe Beispiel

0:0: Typ konnte nicht Typ konnte nicht festgestellt werden festgestellt werden (seltenst der Fall)(seltenst der Fall)

1:1: Das Laufwerk Das Laufwerk existiert nichtexistiert nicht

2:2: Wechselbar Wechselbar (Disketten, MO, etc. )(Disketten, MO, etc. )

3:3: "Normale" Festplatte"Normale" Festplatte 4:4: NetzlaufwerkNetzlaufwerk 5:5: CD-ROMCD-ROM 6:6: RAM-DiskRAM-Disk

Page 19: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

INI / Registry - FunktionenINI / Registry - Funktionen

INI-Dateien:INI-Dateien: WritePrivate WritePrivate

ProfileSection()ProfileSection() WritePrivate WritePrivate

ProfileString()ProfileString() GetPrivate GetPrivate

ProfileSection()ProfileSection() GetPrivate GetPrivate

ProfileString()ProfileString() GetPrivateProfileInt()GetPrivateProfileInt()

Registry:Registry:

RegCloseKey()RegCloseKey() RegCreateKey()RegCreateKey() RegDeleteKey()RegDeleteKey() RegDeleteValue()RegDeleteValue() RegLoadKey()RegLoadKey() RegNotifyChangeKeyValue()RegNotifyChangeKeyValue() RegOpenKey()RegOpenKey() RegQueryInfoKey()RegQueryInfoKey() RegQueryMultipleValues()RegQueryMultipleValues() RegQueryValue()RegQueryValue() RegQueryValueEx()RegQueryValueEx() RegReplaceKey()RegReplaceKey() RegRestoreKey()RegRestoreKey() RegSaveKey()RegSaveKey() RegSetValue()RegSetValue()

Page 20: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Netzwerk / User - FunktionenNetzwerk / User - Funktionen

GetUserDefaultLangIDGetUserDefaultLangID für aktuellen User statt für Systemfür aktuellen User statt für System

WNetGetUserWNetGetUser NULL-Übergabe für System liefert den NULL-Übergabe für System liefert den

User des aktiven SystemsUser des aktiven Systems

RasDialRasDial umfangreiche Funktionsliste für RAS-umfangreiche Funktionsliste für RAS-

AnbindungAnbindung

Page 21: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

WINAPI - SonstigesWINAPI - Sonstiges

Sleep (Hintergrundprozess)Sleep (Hintergrundprozess) Beep (Sound-Ausgabe)Beep (Sound-Ausgabe)

DECLARE INTEGER Beep IN WIN32API INTEGER, INTEGERDECLARE INTEGER Beep IN WIN32API INTEGER, INTEGER*!* DWORD dwFreq,*!* DWORD dwFreq, // sound frequency, in hertz // sound frequency, in hertz

*!* DWORD dwDuration*!* DWORD dwDuration // sound duration, in // sound duration, in

millisecondsmilliseconds

? Beep( 440, 1000 )? Beep( 440, 1000 )

Die Mehrzahl der rund 2000 Funktionen Die Mehrzahl der rund 2000 Funktionen erfordert umfangreiche Strukturen!erfordert umfangreiche Strukturen!

Page 22: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

WINAPI-AufrufeWINAPI-Aufrufe

Verwendung von Verwendung von Windows-System-DLLs Windows-System-DLLs

unterunterMicrosoft Visual FoxProMicrosoft Visual FoxPro

Page 23: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Zuordnung zu Zuordnung zu VariablenartenVariablenarten

#define#define LPCTSTRLPCTSTR STRINGSTRING (Konstante) (Konstante) #define#define LPTSTRLPTSTR STRING@STRING@ #define#define DWORDDWORD INTEGERINTEGER (Long) (Long) #define#define LPDWORDLPDWORD INTEGER@INTEGER@ #define#define UINTUINT INTEGERINTEGER (Unsigned Int) (Unsigned Int) #define#define LPUINTLPUINT INTEGER@INTEGER@ (Unsigned Int) (Unsigned Int) #define#define LONGLONG INTEGERINTEGER (32 Bit)(32 Bit) #define#define BOOLBOOL INTEGERINTEGER #define#define VOIDVOID INTEGERINTEGER #define#define LPVOIDLPVOID STRING@ (beliebiger Pointer)STRING@ (beliebiger Pointer) #define#define HANDLEHANDLE INTEGERINTEGER (Handle)(Handle) #define#define HWNDHWND INTEGERINTEGER (Handle)(Handle) #define#define HINSTANCEHINSTANCE INTEGERINTEGER (Handle)(Handle)

Page 24: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Beschreibungen in WINAPI-Beschreibungen in WINAPI-HilfeHilfe

Vorlage in WINAPI-Hilfe:Vorlage in WINAPI-Hilfe:DWORD WNetGetUser(DWORD WNetGetUser(

LPTSTR lpszLocalName,LPTSTR lpszLocalName, // address of local name// address of local name

to get user name forto get user name for

LPTSTR lpszUserName,LPTSTR lpszUserName, // address of buffer for user name // address of buffer for user name

LPDWORD lpcchBuffer LPDWORD lpcchBuffer // address of buffer size variable // address of buffer size variable

););

Visual FoxPro (mit Defines!):Visual FoxPro (mit Defines!):DECLARE DWORD WNetGetUser IN WIN32API ;DECLARE DWORD WNetGetUser IN WIN32API ;

LPTSTR lpszLocalName,; LPTSTR lpszLocalName,; && address of local name && address of local name

to get user name forto get user name for

LPTSTR lpszUserName,;LPTSTR lpszUserName,; && address of buffer&& address of buffer

LPDWORD lpcchBufferLPDWORD lpcchBuffer && address buffer size variable&& address buffer size variable

Page 25: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Wertebereiche für VariablenWertebereiche für Variablen

intint *2*2 signedsigned System abhängig (2 Bytes)System abhängig (2 Bytes) unsigned intunsigned int *2*2 unsignedunsigned System abhängig (2 Bytes)System abhängig (2 Bytes) charchar 1 1 signed charsigned char -128 bis 127-128 bis 127 unsigned charunsigned char 1 1 nonenone 0 bis 2550 bis 255 shortshort 2 2 short intshort int -32,768 bis 32,767-32,768 bis 32,767 unsigned short 2unsigned short 2 ushort intushort int 0 bis 65,5350 bis 65,535 longlong 4 4 long intlong int -2,147,483,648 bis-2,147,483,648 bis

2,147,483,6472,147,483,647 unsigned longunsigned long 4 4 ulong intulong int 0 bis 4,294,967,2950 bis 4,294,967,295 enumenum 2 2 nonenone -32,768 bis 32,767-32,768 bis 32,767 floatfloat 4 4 nonenone 3.4E ± 38 (7 Stellen)3.4E ± 38 (7 Stellen) doubledouble 8 8 nonenone 1.7E ± 308 (15 Stellen)1.7E ± 308 (15 Stellen) long doublelong double 1010 nonenone 1.2E ± 4932 (19 Stellen)1.2E ± 4932 (19 Stellen)

In VFP sind int/short, unsignd int/unsignd short im Prinzip identischIn VFP sind int/short, unsignd int/unsignd short im Prinzip identisch

Page 26: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Erstellen von FLLsErstellen von FLLs

Erstellung von FLLs mit dem Erstellung von FLLs mit dem Library Construction Kit vonLibrary Construction Kit von

Microsoft Visual FoxProMicrosoft Visual FoxPro

Page 27: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Benötigte Dateien (außer C+Benötigte Dateien (außer C++)+)

WINAPIMS.LIBWINAPIMS.LIB 1.) alle VFP-Funktionen, die per FLL angesprochen 1.) alle VFP-Funktionen, die per FLL angesprochen

werden könnenwerden können 2.) etlichen Hilfsfunktionen z.B. für 2.) etlichen Hilfsfunktionen z.B. für

SpeichermangagementSpeichermangagement Diese Bibliothek wird zu der FLL einfach dazugelinktDiese Bibliothek wird zu der FLL einfach dazugelinkt

PRO_EXT.HPRO_EXT.H Deklarationen o.g. Funktionen, wichtige Strukturen, Deklarationen o.g. Funktionen, wichtige Strukturen,

ein paar Konstantenein paar Konstanten Einbindung mit:Einbindung mit:

#include <pro_ext.h>#include <pro_ext.h>

Page 28: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

ParameterübergabeParameterübergabe

Übergabe Adresse ParameterblockÜbergabe Adresse Parameterblock Enthält Anzahl der Parameter und Enthält Anzahl der Parameter und

je Parameter ein Strukturelement je Parameter ein Strukturelement mit dem jeweiligen Wert, mit dem jeweiligen Wert, Ausnahmen:Ausnahmen: Referenz-Parameter kommt als PointerReferenz-Parameter kommt als Pointer Stringübergabe als Handle (Adr of Adr)Stringübergabe als Handle (Adr of Adr)

Hinweis: Datumsübergabe Double Hinweis: Datumsübergabe Double (!)(!)

Page 29: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

WerterückgabeWerterückgabe

Deklaration als Deklaration als „void“ oder „void „void“ oder „void far“ - also keine far“ - also keine direkten direkten FunktionsresultatFunktionsresultatee

Stattdessen Stattdessen Werterückgabe Werterückgabe via via Funktionsaufruf:Funktionsaufruf:

_RetChar()_RetChar() _RetCurrency()_RetCurrency() _RetDateStr()_RetDateStr() _RetDateTimeStr()_RetDateTimeStr() _RetFloat()_RetFloat() _RetInt()_RetInt() _RetLogical()_RetLogical() _RetVal()_RetVal()

void EineFunktion(ParamBlk *parm)void EineFunktion(ParamBlk *parm)

{{

_RetChar( "Rückgabe an FoxPro" );_RetChar( "Rückgabe an FoxPro" );

}}

Page 30: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Parameterarten, FunktionenParameterarten, Funktionen

Parameterarten:Parameterarten: „“„“ - kein Parameter- kein Parameter „„C“C“ - Charakter- Charakter „„D“D“ - Datum- Datum „„I“I“ - Integer- Integer „„L“L“ - Logisch- Logisch „„N“N“ - Numerisch- Numerisch „„R“R“ - Referenz- Referenz „„T“T“ - DateTime- DateTime „„Y“Y“ - Währung- Währung „„O“O“ - Objekt- Objekt

Feste Funktionen:Feste Funktionen: INTERNALINTERNAL

interne Funktioninterne Funktion

CALLONLOADCALLONLOAD Aufruf beim LadenAufruf beim Laden

CALLONUN-LOADCALLONUN-LOAD Aufruf beim Entladen Aufruf beim Entladen

(kein Par.)(kein Par.)

Page 31: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

FOXINFO-StrukturFOXINFO-Struktur

Name der Funktion unter VFP (Groß)Name der Funktion unter VFP (Groß) Name der Funktion in C (Exakt)Name der Funktion in C (Exakt)

Pointer, Type-Cast aus PRO_EXT.H: FPFIPointer, Type-Cast aus PRO_EXT.H: FPFI

Maximalzahl der ParameterMaximalzahl der Parameter Typ der Parameter (CSV-Liste, . = opt.)Typ der Parameter (CSV-Liste, . = opt.) Beispiel:Beispiel:

FoxInfo myFoxInfo[] = {FoxInfo myFoxInfo[] = {

{"VFPFUNKTION",(FPFI) EineFunktion, 2, "I,.C"},{"VFPFUNKTION",(FPFI) EineFunktion, 2, "I,.C"},

};};

Page 32: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

FOXTABLE-StrukturFOXTABLE-Struktur

Die eigentliche Verbindung zu FoxPro Die eigentliche Verbindung zu FoxPro wird über die Struktur FoxTable wird über die Struktur FoxTable hergestellt. FoxPro sucht beim Laden hergestellt. FoxPro sucht beim Laden einer FLL diese Struktur und entnimmt einer FLL diese Struktur und entnimmt ihr alle erforderlichen Informationen.ihr alle erforderlichen Informationen.

FoxTable _FoxTable = {FoxTable _FoxTable = {

(FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo(FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};};

Die Sizeof-Berechnungen dienen nur der (dadurch auch bei Die Sizeof-Berechnungen dienen nur der (dadurch auch bei Strukturänderungen immer korrekten) Berechnung der Anzahl der Einträge Strukturänderungen immer korrekten) Berechnung der Anzahl der Einträge innerhalb der FoxInfo-Struktur, m.a.W. der Anzahl der exportierten innerhalb der FoxInfo-Struktur, m.a.W. der Anzahl der exportierten FunktionenFunktionen

Page 33: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Template für C / C++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++<== für C++FoxTable _FoxTable = {(FoxTable *)0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo};} <== für C++<== für C++

Page 34: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Vor-/Nachteile von FLLsVor-/Nachteile von FLLs

Vorteile:Vorteile: Alle Funktionen Alle Funktionen

von VFP in C von VFP in C verfügbar (seek, verfügbar (seek, wait wind usw.)wait wind usw.)

Keine Deklaration Keine Deklaration notwendig (Direkt-notwendig (Direkt-aufruf möglich)aufruf möglich)

Nachteile:Nachteile: Können nur von Können nur von

FoxPro verwendet FoxPro verwendet werdenwerden

FLL ohne FLL ohne Rückgabe kann Rückgabe kann mit Rückgabe mit Rückgabe deklariert werden deklariert werden (Endung als DLL)(Endung als DLL)

Page 35: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

FoxPro-API-BibliothekFoxPro-API-Bibliothek

Die API-Bibliothek vonDie API-Bibliothek von

Microsoft Visual FoxProMicrosoft Visual FoxPro

Page 36: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

API-Bibliothek (1)API-Bibliothek (1)

_Activate_Activate _Alloc (Speicher)_Alloc (Speicher) _DB (*) _DB (*)

(Datenbank)(Datenbank) _Deactivate_Deactivate _Dialog (Message)_Dialog (Message) _Dispose _Dispose

(Löschen)(Löschen) _Ed (*) (Editor)_Ed (*) (Editor)

_Error/_ErrorInfo_Error/_ErrorInfo _Evaluate (!)_Evaluate (!) _Execute (!)_Execute (!) _F (*) (LowLevel)_F (*) (LowLevel) _Find _Find

(Objektsuche)(Objektsuche) _Free (Freigabe)_Free (Freigabe) _Get (Information)_Get (Information)

Page 37: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

API-Bibliothek (2)API-Bibliothek (2)

_GetItem (Handle)_GetItem (Handle) _Global _Global

(Variablen)(Variablen) _H (DB-Header)_H (DB-Header) _Mem (Speicher)_Mem (Speicher) _Menu (Menü)_Menu (Menü) _Memo (Memo)_Memo (Memo) _Mouse (Maus)_Mouse (Maus)

_New (Neuanlage)_New (Neuanlage) _Object_Object _Put (Ausgabe)_Put (Ausgabe) _Ret (Rückgabe)_Ret (Rückgabe) _Set (Einstellung)_Set (Einstellung) _Str (Konversion)_Str (Konversion) _W (*) (Fenster)_W (*) (Fenster)

Page 38: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

API-DatentypenAPI-Datentypen

EDLINEEDLINE - Zeilennummer Editfenster- Zeilennummer Editfenster EDPOSEDPOS - Zeichenposition dito- Zeichenposition dito FCHANFCHAN - Low-Level-File-Handle- Low-Level-File-Handle FPFIFPFI - Funktionspointer (Integer)- Funktionspointer (Integer) ITEMIDITEMID - Identifier Menüeintrag- Identifier Menüeintrag MENUIDMENUID - Identifier Menü- Identifier Menü MHANDLEMHANDLE - Identifier Speicherblock- Identifier Speicherblock NTINTI - Name-Table-Index- Name-Table-Index WHANDLEWHANDLE - Fenster-Handle- Fenster-Handle

Page 39: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

API-DatenstrukturenAPI-Datenstrukturen

EventRecEventRec - Ereignisstruktur- Ereignisstruktur FoxInfoFoxInfo - siehe oben- siehe oben FoxTableFoxTable - siehe oben- siehe oben LocatorLocator - Übergabe Parameter- Übergabe Parameter ParamBlkParamBlk - siehe oben- siehe oben ParameterParameter- Übergabe Parameter Ref.- Übergabe Parameter Ref. PointPoint - Koordinaten- Koordinaten RectRect - Koordinaten Rechteck- Koordinaten Rechteck ValueValue - Übergabe Parameter Wert- Übergabe Parameter Wert

Page 40: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

API-Variablen-ZugriffAPI-Variablen-Zugriff

NTI = Name Table Index NTI = Name Table Index (Array)(Array)

_NameTableIndex( ) für Suche_NameTableIndex( ) für Suche _Load( )_Load( )= Lesen= Lesen _Store( )_Store( ) = Schreiben = Schreiben _NewVar( )= neue Variable_NewVar( )= neue Variable _Release( )_Release( ) = Variable löschen= Variable löschen

Page 41: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

API-Speicher-ZugriffAPI-Speicher-Zugriff

Speicherzugriff über HandlesSpeicherzugriff über Handles Handle ist ein Index in ein Array von Handle ist ein Index in ein Array von

Pointer auf SpeicherPointer auf Speicher Zugriffsfunktionen unter C:Zugriffsfunktionen unter C:

_AllocHandle( )_AllocHandle( ) _HLock( )_HLock( ) _HandToPtr( )_HandToPtr( ) *-- Verwendung*-- Verwendung _HUnLock( )_HUnLock( )

Hinweis: _AllocMemo( ) für Memofelder (!)Hinweis: _AllocMemo( ) für Memofelder (!)

Page 42: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

FragestellungenFragestellungen

Auswahl und Auswahl und Einsatz von FLLsEinsatz von FLLs

Auswahl und Auswahl und Einsatz von DLLsEinsatz von DLLs

Einsatz von WIN-Einsatz von WIN-API-FunktionenAPI-Funktionen

Selbsterstellung Selbsterstellung von FLLs mit APIvon FLLs mit API

Page 43: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Vielen Dank!Vielen Dank!

Das waren die Themen:Das waren die Themen: Arbeiten mit FLLsArbeiten mit FLLs

Library, FoxTools-Library, FoxTools-Übersicht, Übersicht, ProblemeProbleme

Arbeiten mit DLLsArbeiten mit DLLs Deklaration, Parameter-übergabe, Deklaration, Parameter-übergabe,

FILERFILER/OLE/OLE

WinAPI-FunktionenWinAPI-Funktionen Fenster, System, I/O, INI/Registry, Fenster, System, I/O, INI/Registry,

Netzwerk/User, SonstigeNetzwerk/User, Sonstige

Variablenzuordnung, Übernahme, Variablenzuordnung, Übernahme, WertebereicheWertebereiche

Erstellen von FLLsErstellen von FLLs Dateien, Werteübergabe, Dateien, Werteübergabe,

Werterückgabe, FOXINFO, FOXTABLE, Werterückgabe, FOXINFO, FOXTABLE, API-Bibliothek, Vor/NachteileAPI-Bibliothek, Vor/Nachteile

FoxPro-API-BibliothekFoxPro-API-Bibliothek API-Bibliothek, Typen, Strukturen, API-Bibliothek, Typen, Strukturen,

Variablen, SpeicherzugriffVariablen, Speicherzugriff

Page 44: Wizards & Builders GmbH Arbeiten mit Libraries Arbeiten mit FLL- und DLL- Libraries unter Microsoft Visual FoxPro.

Wizards & Wizards & Builders GmbH Builders GmbH

Wenn Fragen bestehen:Wenn Fragen bestehen:

Wizards & BuildersWizards & BuildersMethodische Software-Methodische Software-

Entwicklung GmbHEntwicklung GmbH

Frankfurter Str. 21bFrankfurter Str. 21b

61476 Kronberg61476 Kronberg

Tel.: 06173-950906Tel.: 06173-950906

Fax: 06173-950907Fax: 06173-950907

CIS: 101605,175CIS: 101605,175