LIBXL: ohne fpqcall und ot4xb möglich ?

Moderator: Moderatoren

ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2112
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 8 Mal
Danksagung erhalten: 22 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von ramses »

brandelh hat geschrieben: So, 21. Mär 2021 1:47 Ich verstehe nicht warum es nicht gehen sollte, eine Funktion in der eigenen EXE oder Xbase++ DLL aufzurufen ???
Entweder ich starte die direkt im Quellcode oder über ein Macro :? Was übersehe ich ?
Hallo Hubert

du hast übersehen dass es nicht "Das nicht geht" ist sondern dass die Performance übers Makro derart schlecht ist dass sich dieser Weg aus Performance Gründen bei vielen solchen Aufrufen gleich selbst verunmöglicht .....
Valar Morghulis

Gruss Carlo
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 340
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 8 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

els

Beitrag von Marcus Herz »

Mann kann mit dem Makro Operator direkt Funtkionen aufrufen, die mitgelinkt sind!

Code: Alles auswählen

if IsFunction("cFunc")
&(cFunc)(paramer liste)   // ohne Codeblock
Das ist laut einem Gespräch auf einer der Devcons mit dem Alaska Team sogar ein schneller Aufruf, weil der direkt über die Funktionstabelle geht. Und der Linker mosert nicht wegen unbekannten Funktionen.

zu EXTERN:
Eine solche Deklaration macht ja nur Sinn, wenn ich schon vor dem Linken die Typen der Parameter kenne, also dass ich die Funktion unterstütze. Funktionen, welche ich erst während der Laufzeit identifiziere, muss ich mit DLLFUNKTION aufrufen:

Code: Alles auswählen

STATIC sApi:=NIL
LOCAL uRet
	if IsNil(sApi)
		sApi := DllPrepareCall( <dllname>, DLL_STDCALL, cFunc)
	endif
	uRet := DllExecuteCall(sApi, p1, p2, p3,......)
Das dürfte am Ende sich nicht viel von Ot4Xb unterscheiden (kennen den Code leider nicht), aber die technischen Rahmenbedingungen sind ja die selben. Ich weiß nicht, ob Ot4Xb die Typen der Parameter erkennen kann, dazu bräuchte es ja die LIB dazu. Ist im Normalfall wahrscheinlich auch kein Problem, weil ja alle Parameter auf C- Ebene 32bit Pointer sind. DIe aufgerufene Funktion weiß, was sich dahinter verbirgt: ein Integer oder ein Pointer auf eine Zeichenkette.
Man kann obige Funktion ja dahingehend erweitern, das man ein Array mit den Templates führt, um den 2. Aufruf zu beschhleunigen:

Code: Alles auswählen

FUNC DynCall(cDll, cFunc )
STATIC aTemplate := {}
LOCAL uRet
LOCAL nPos
     if (nPos := ascan(aTemplate, {|a| a[1] == cFunc})) = 0
     	aadd( aTemplate, {cFunc,  DllPrepareCall( <dllname>, DLL_STDCALL, cFunc)})
     	nPos	:= len(aTemplate)
     endif
     if pcount() = 3
	uRet := DllExecuteCall(aTemplate[nPos,2], pValue(3))
    elseif pcount() = 3
	uRet := DllExecuteCall(aTemplate[nPos,2], pValue(3), pvlaue(4))
	....
	endif
return uRet
	
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15427
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 26 Mal
Danksagung erhalten: 13 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von brandelh »

ramses hat geschrieben: So, 21. Mär 2021 6:26
brandelh hat geschrieben: So, 21. Mär 2021 1:47 Ich verstehe nicht warum es nicht gehen sollte, eine Funktion in der eigenen EXE oder Xbase++ DLL aufzurufen ???
Entweder ich starte die direkt im Quellcode oder über ein Macro :? Was übersehe ich ?
Hallo Hubert

du hast übersehen dass es nicht "Das nicht geht" ist sondern dass die Performance übers Makro derart schlecht ist dass sich dieser Weg aus Performance Gründen bei vielen solchen Aufrufen gleich selbst verunmöglicht .....
OK - das kann ich verstehen, ist aber

1. wohl ein Sonderfall, und ...
2. lautet die Überschrift LIBXL ohne ot4xb möglich ... daher meine Verwirrung.
Gruß
Hubert
Benutzeravatar
Frank Grossheinrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 66
Registriert: Fr, 31. Mär 2017 15:06
Wohnort: Kirchheim an der Weinstraße
Hat sich bedankt: 1 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Frank Grossheinrich »

Tom hat geschrieben: Mo, 22. Feb 2021 16:20 Ja, mit EXTERN ist einiges besser geworden, aber wenn man einen Pointer zurückbekommt (wie z.B. von QPDF), muss man doch noch mit ot4xb peeken.
Dann seid gespannt auf das nächste Update! Das kümmert sich SEHR STARK um EXTERN! Und ergänzt hoffentlich alles, was noch so gefehlt hat.

Grüße, Frank
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1855
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 8 Mal
Danksagung erhalten: 21 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Werner_Bayern »

Servus Frank,

löst das dann auch mein Problem mit AssocQueryString? Wobei hier aber vermutlich der Fehler bei mir liegt :wink:
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2112
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 8 Mal
Danksagung erhalten: 22 Mal

Re: els

Beitrag von ramses »

Marcus Herz hat geschrieben: So, 21. Mär 2021 11:40 Mann kann mit dem Makro Operator direkt Funtkionen aufrufen, die mitgelinkt sind!

Code: Alles auswählen

if IsFunction("cFunc")
&(cFunc)(paramer liste)   // ohne Codeblock
Hallo Markus

den kannte ich nicht! Auf die Idee nach dem Macro in Klammern die Parameter für die Funktion im Macro zu setzten wäre ich nie gekommen und habe es damals auch nie versucht oder nie irgendwo gelesen.

Es funktioniert in der Tat und einiges Schneller als der Weg über den Macro / Codeblock Weg.

Danke für den Tip.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Frank Grossheinrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 66
Registriert: Fr, 31. Mär 2017 15:06
Wohnort: Kirchheim an der Weinstraße
Hat sich bedankt: 1 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Frank Grossheinrich »

löst das dann auch mein Problem mit AssocQueryString? Wobei hier aber vermutlich der Fehler bei mir liegt :wink:
Servus Werner,

ehhhmmm, und was war/ist dein Problem?
Was wir leider NICHT implementiert haben ist "Fix all problems". Sorry.

:)
Grüße, Frank
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1855
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 8 Mal
Danksagung erhalten: 21 Mal

Re: LIBXL: ohne fpqcall und ot4xb möglich ?

Beitrag von Werner_Bayern »

Servus Frank,

da hatte ich Dir eine Mail geschickt.

"Fix all problems" - Gibt's dafür nicht einen Schalter? Einfach von false auf true setzen? :)
es grüßt

Werner

<when the music is over, turn off the lights!>
Antworten