Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: einfache Methoden für Callback

0 views
Skip to first unread message
Message has been deleted

Olaf Doschke

unread,
Oct 7, 2009, 8:48:19 AM10/7/09
to
Hallo Winfried,

siehe http://fox.wikis.com/wc.dll?Wiki~CallbacksAndEvents~WIN_COM_DNA
Mit der zuletzt erw�hnten VFP2C.FLL solltest Du gl�cklich werden k�nnen.

Tsch��, Olaf.


Christian Ehlscheid

unread,
Oct 7, 2009, 10:32:05 AM10/7/09
to
Hallo,

mit der VFP2C32 FLL (www.vfp2c.com) kannst du dir Callbackfunktionen
erstellen die aus Delphi aufrufbar sind.

Kᅵnnte z.B. so aussehen ...

#INCLUDE vfp2c.h
SET LIBRARY TO vfp2c32.fll ADDITIVE
INITVFP2C32(VFP2C_INIT_CALLBACK)

LOCAL loCallback

DECLARE INTEGER DeineFunktion IN deinerDll.dll STRING edidaten, INTEGER
nCallbackFunction
loCallBack = CREATEOBJECT('EDICALLBACK')
DeineFunktion('Edidaten .... ', loCallback.Address)

DEFINE CLASS EDICALLBACK AS Custom

Address = 0

FUNCTION Init
THIS.Address = CreateCallbackFunc('CallbackFunction','INTEGER', 'STRING,
STRING', THIS)
ENDFUNC

FUNCTION Destroy
IF THIS.Address != 0
DestroyCallbackFunc(THIS.Address)
ENDIF
ENDFUNC

FUNCTION CallbackFunction(lnStringPointer1, lnStringPointer2)
LOCAL lcEdiDaten, lcEdiSegment
lcEdiSegment = ReadPCString(lnStringPointer1)
lcEdiDaten = ReadPCString(lnStringPointer2)
&& hier deine Verarbeitung der Edidaten ..
RETURN 1
ENDFUNC

ENDDEFINE

auf Delphi Seite (ungefᅵhr so ... hab nicht viel Erfahurng mit Delphi):

type EdiCallbackProc = function(i: AnsiString, o: AnsiString): Integer;
stdcall;

procedure DeineFunktion(Edi:AnsiString, FoxCallback: EdiCallbackProc );
stdcall;
var
edidaten: AnsiString;
edisegment: AnsiString;
begin
if Assigned(FoxCallback) then
//dein Ediparser ...
if not FoxCallback(edisegment, edidaten) then
// Ediparser unterbrechen wenn die FoxPro Callbackfunktion 0 zurᅵckgibt
..
end;
end;

Gruᅵ
Christian

Message has been deleted

Christian Ehlscheid

unread,
Oct 20, 2009, 6:46:00 AM10/20/09
to
Hallo,

> Mit der String-ᅵbergabe klappts noch nicht; das ist aber sowieso immer ein
> heikles Thema und ich kᅵnnte mir per API-Calls auch die Strings abholen.

mein Beispielcode war auch fehlerhaft.

du mᅵsstest folgende ᅵnderungen vornehmen:

FUNCTION CallbackFunction(lnStringPointer1, lnStringPointer2)
LOCAL lcEdiDaten, lcEdiSegment

lcEdiSegment = ReadCString(lnStringPointer1) && ReadCString staat
ReadPCString
lcEdiDaten = ReadCString(lnStringPointer2)


&& hier deine Verarbeitung der Edidaten ..
RETURN 1
ENDFUNC

und in Delphi:

X = Datentyp des Rᅵckgabewertes der Ansistring.c_str() Methode, in C++ wᅵre
das "char*"

type EdiCallbackProc = function(i: X, o: X): Integer;
stdcall;

procedure DeineFunktion(Edi:X, FoxCallback: EdiCallbackProc );


stdcall;
var
edidaten: AnsiString;
edisegment: AnsiString;
begin
if Assigned(FoxCallback) then
//dein Ediparser ...

if not FoxCallback(edisegment.c_str(), edidaten.c_str()) then


// Ediparser unterbrechen wenn die FoxPro Callbackfunktion 0 zurᅵckgibt
..
end;
end;

> Unbescheidene Anfrage: Gibt es eigentlich eine Doku zu den FLL-Funktionen?

Keine HTML Doku, es gibt das Beispielprojekt und ein Intellisenseskript.

Gruᅵ
Christian

Message has been deleted
0 new messages