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.
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
> 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