Funktion per Codeblock - unbekannte Funktion

Vom Front-End bis SOAP.

Moderator: Moderatoren

Funktion per Codeblock - unbekannte Funktion

Beitragvon Armin » Mi, 12. Jan 2011 14:52

Hallo zusammen,

ich meine, dass folgender Code in normalem Xbase++ laufen sollte. Im WAA kommt die Fehlermeldung "Unbekannte Funktion".
Hat jemand eine Idee?
Grüsse, Armin

Code: Alles auswählen
oPackage:registerForm("AB_TEST90")     // ist nicht unebdingt nötig
oPackage:registerForm("AB_TEST99")     // ist nicht unebdingt nötig


function AB_TEST90(oHTML, oContext)
local bFunc
local cFunc := ""

ab_test99()                            // funktioniert
bFunc := {|| ab_test99()}
eval(bFunc)                           // funktioniert

cFunc := "ab_test99()"
&(cFunc)                               // Absturz: Unbekannte Funktion

cFunc := "{|| ab_test99()}"
bFunc := &(cFunc)
eval(bFunc)                           // Absturz: Unbekannte Funktion

return .t.

function ab_test99()

return .t.
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 350
Registriert: Mo, 26. Sep 2005 11:09
Wohnort: 75331 Engelsbrand

Re: Funktion per Codeblock - unbekannte Funktion

Beitragvon Tom » Mi, 12. Jan 2011 16:15

Hallo, Armin.

Ich nutze den WAA nicht, aber in reinem Xbase läuft der Code problemlos durch.

Wenn ich die Doku richtig verstehe, sorgt RegisterForm() dafür, dass eine Funktion im Browser zur Verfügung steht. Vielleicht bewirkt diese Methode zugleich, dass die Funktion "STATIC" (oder vergleichbar) wird. In diesem Fall würde nämlich auch der Code in Xbase an den von Dir genannten Stellen abstürzen, also wenn aus:

function ab_test99()

static function ab_test99()

würde.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6680
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: Funktion per Codeblock - unbekannte Funktion

Beitragvon brandelh » Mi, 12. Jan 2011 16:26

Hi,

bei "normalen" Programmen kann es vorkommen, dass eine Funktion die NUR in einem Text-Codeblock
aufgerufen wird nicht referenziert (also eingebunden) wird. Daher muss man diese Funktion
in einer "Toten Ecke" aufrufen, damit der Linker sie einbindet:

Code: Alles auswählen
proc Main()
   local cFunk, bFunc
   cFunc := "{|| ab_test99() }"
   bFunc := &(cFunc)
   eval(bFunc)
   if .f.  // wird nie ausgeführt, aber bindet Funktion ein.
      ab_test99()
   endif
return

function ab_test99()
return "Test"


Für Code aus der gleichen EXE ist das NIE nötig, aber Funktionen aus DLLs brauchen das.
Der WAA nutzt ja ausschließlich DLL, also vielleicht hilft es ja ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13268
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Funktion per Codeblock - unbekannte Funktion

Beitragvon Armin » Mi, 12. Jan 2011 16:50

Hallo Tom,

ok, Dein Gedanke ist gut. Ich habe aber diese Zeile erst als es nicht funktionierte eingefügt - habe sie jetzt aber nochmals gelöscht und getestet - geht nicht :scratch: .
oPackage:registerForm("AB_TEST99") // ist nicht unebdingt nötig.

Hallo Hubert,

dann müsste ja mein Test-Code funktionieren - ich ruf die Funktion ja weiter oben schon auf:
Code: Alles auswählen
...
ab_test99()                            // funktioniert
...


Grüsse, Armin
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 350
Registriert: Mo, 26. Sep 2005 11:09
Wohnort: 75331 Engelsbrand

Re: Funktion per Codeblock - unbekannte Funktion

Beitragvon Armin » Mo, 30. Mär 2015 13:56

Hallo zusammen,

ich hatte gerade mal wieder das gleiche Problem und habe jetzt die Lösung gefunden:

Der Package-Name muss direkt vor den Funktionsnamen!

z.B. in USERDLL.DLL:
Code: Alles auswählen
function hallo
   local cTest := ""
return cTest

function testfunction(oHTML, oContext)
   local cString := {|| USERDLLhallo()}
 ...
return 0


Grüße, Armin
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 350
Registriert: Mo, 26. Sep 2005 11:09
Wohnort: 75331 Engelsbrand


Zurück zu Web

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron