Anzahl Parameter bei Funktionsaufruf beschränkt?

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von mini990 »

Hallo,
ist das ein Bug oder korrekt?????
Bei einem Funktionsaufruf werden nur die ersten 7 Parameter erkannt.


Gruß Stefan
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von georg »

Hallo, Stefan -


ich habe Funktionen, die deutlich mehr Parameter entgegennehmen, und das funktioniert.

Kannst Du mal ein kleines Code-Beispiel bereitstellen?

Oder versuche das mal aus:

Code: Alles auswählen

FUNCTION MAIN
  TestMe(1, 2, 3, 4, 5, 6, 7, 8, 9, 109
RETURN(.T.)
FUNCTION TestMe(p1, p,2 p,3 p,4 p,5 p,6 p,7 p,8 p9, p10
  ? p1
  ? p2
  ? p3
  ? p4
  ? p5
  ? p6
  ? p7
  ? p8
  ? p9
  ? p10
  PAUSE
RETURN(.T.)
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von mini990 »

Die Anzahl kann es eigentlich nicht sein....

Code: Alles auswählen

if choice2(10,28,"Programm beenden?","Nein","Ja","W+/R","W/B",.T.) = "Ja"

FUNCTION choice2( __yy,__xx,__txt,__field1,__field2,__colup,__colstd,__win,__colhi )
type("__WIN") ergibt "U"

Anderer Versuch:

Code: Alles auswählen

if _choice2(10,28,{"Programm beenden?","Nein","Ja"},"W+/R","W/B",.T.) = "Ja"

FUNCTION _choice2( __yy,__xx,aFelder,__colup,__colstd,__win,__colhi )
type("__WIN") ergibt "U"

Gruß Stefan
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von georg »

Hallo, Stefan -


benenne mal Deine Parameter um. Ist nur so ein Gedanke, aber eventuell kollidierst Du mit was Internem wegen der Unterstriche vor dem Variablennamen?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von mini990 »

Hallo Georg,
leider keine Änderung.....

Gruß Stefan
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von Herbert »

Wäre eigentlich erstaunlich gewesen, denn:
Der Name für eine Instanzvariable unterliegt den gleichen Konventionen wie normale Variablennamen. Er muß mit einem Unterstrich oder einem Buchstaben beginnen und kann ansonsten aus alphanumerischen Zeichen bestehen. Es sind die ersten 255 Zeichen signifikant
Ich vermute, der 7. oder 8. Varialenname blockiert dich. Nenne die __colstd und/oder die __win mal um.
Grüsse Herbert
Immer in Bewegung...
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von georg »

Hallo, Stefan -


also, ich habe das mal in dieses Programm umgesetzt:

Code: Alles auswählen


#INCLUDE "Xbp.CH"

FUNCTION Main()
   if choice2(10,28,"Programm beenden?","Nein","Ja","W+/R","W/B",.T.) = "Ja"
      ConfirmBox(, "done.", "done", XBPMB_INFORMATION, XBPMB_OK)
   ENDIF
RETURN (.T.)


FUNCTION choice2( __yy,__xx,__txt,__field1,__field2,__colup,__colstd,__win,__colhi )
   ? __yy
   ?__xx
   ?__txt
   ?__field1
   ?__field2
   ?__colup
   ?__colstd
   ?__win
   ?__colhi
   wait
RETURN("Ja")
Als erstes fällt mir auf, dass Du nur acht Parameter übergibst, aber neun erwartest.

Dann habe ich das Programm mal laufen lassen und im Debugger im choice2() angehalten:

Bild

Ich würde mal davon ausgehen, dass es bei mir korrekt funktioniert, da __win mit dem Wert .T. angezeigt wird, und der neunte (nicht übergebene Parameter) __colhi den Wert NIL hat.

Ich verwende solche kurzen Programme, wenn ich den Eindruck habe, dass Xbase++ sich nicht regelkonform verhält. Läuft das kurze Programm wie erwartet, dann muss ich die Fehlerursache in meinem Code suchen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von brandelh »

Hi,

ich habe deine Zeilen oben auch umgesetzt und kann Georg bei diesem Test nur zustimmen:

Code: Alles auswählen

procedure main

   set alternate to TestParameter.txt
   set alternate on

   ? "Testaufruf starten, Parameter listen"
   ? choice2(10,28,"Programm beenden?","Nein","Ja","W+/R","W/B",.T.)

return

FUNCTION choice2( __yy,__xx,__txt,__field1,__field2,__colup,__colstd,__win,__colhi )
   ? "P1 __yy    ",ValType(__yy)    ,__yy
   ? "P2 __xx    ",ValType(__xx)    ,__xx
   ? "P3 __txt   ",ValType(__txt)   ,__txt
   ? "P4 __field1",ValType(__field1),__field1
   ? "P5 __field2",ValType(__field2),__field2
   ? "P6 __colup ",ValType(__colup) ,__colup
   ? "P7 __colstd",ValType(__colstd),__colstd
   ? "P8 __win   ",ValType(__win)   ,__win
   ? "P9 __colhi ",ValType(__colhi) ,__colhi
return "Ende"
ergibt dieses Ergebnis (wie bei Georg auch):

Code: Alles auswählen

Testaufruf starten, Parameter listen
P1 __yy     N         10
P2 __xx     N         28
P3 __txt    C Programm beenden?
P4 __field1 C Nein
P5 __field2 C Ja
P6 __colup  C W+/R
P7 __colstd C W/B
P8 __win    L J
P9 __colhi  U NIL
Ende
So, wieso kannst du dann ein anderes Ergebnis haben ?
Es könnte grundsätzlich an einer unterschiedlichen Xbase++ Version liegen (ich habe 1.90.355 getestet), aber das glaube ich hier nicht.
Ich habe früher häufiger viele Parameter benutzt und noch nie Probleme gehabt.

ABER es kann sehr wohl an den Namen liegen, wenn du eine INCLUDE Datei nutzt, die einen Teilbegriff einer Variable gegen etwas anderes austauscht !

Also compiliere mal mit dem Parameter /p und untersuche die entstehende PPO-Datei, wenn du in den Zeilen der Funktion dann Änderungen des Namens feststellst,
hast du den Fehler schon gefunden.
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von Tom »

Ich denke, irgendwo in Stefans Originalcode ist irgendwo ganz schlicht ein Unterstrich zu viel oder zu wenig.
Herzlich,
Tom
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von mini990 »

nene.... die Unterstriche hab ich richtig gezählt... :)
Das Beispiel von Georg läuft bei mir auch ohne Probleme...
Ich versuche gerade ein kleines Clipper 5.2 Programm in den Hybrid-Modus zu bringen...

Kann es an der Project Datei liegen?

Code: Alles auswählen

[PROJECT]
    DEBUG         = yes
    VERSION       = 2.0
    PROJECT.XPJ

[PROJECT.XPJ]
    PR.exe

[PR.exe]
    COMPILE       = xpp
    COMPILE_FLAGS = /wi /wl /wu /q /w 
    DEBUG_SAVE    = yes
    GUI           = yes
    LINKER        = alink
    LINK_FLAGS    = 
    RC_COMPILE    = arc
    RC_FLAGS      = /v
// $START-AUTODEPEND
    STD.CH
    SET.CH
    NATMSG.CH
    GET.CH
    PROMPT.CH
    MEMVAR.CH
    COLLAT.CH
    INKEY.CH
    COMMON.CH
    A2.obj
    RS_LIB.OBJ
// $STOP-AUTODEPEND
    A2.PRG
    rs_lib.prg
    XBTBASE1.LIB
    XBTBASE2.LIB
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von brandelh »

baue doch einfach mal die Kontrollausgaben in deine Funktion ein :!:
Eventuell hast du auch an einer Stelle ein Komma zuviel, das gibt auch NIL.

Jedenfalls liegt es nicht am Compiler, es bleiben nur Tippfehler im Code oder eine unglückliche include Datei.
Gruß
Hubert
Benutzeravatar
komnick
UDF-Programmierer
UDF-Programmierer
Beiträge: 75
Registriert: Mi, 04. Jun 2014 9:56
Wohnort: Berlin
Hat sich bedankt: 1 Mal
Danksagung erhalten: 5 Mal

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von komnick »

Hallo Stefan,

es besteht ein Unterschied zwischen den Funktionen TYPE() und VALTYPE().

TYPE() liefert nur den Typ von PUBLIC- oder PRIVATE-Variablen, VALTYPE() ist auch für LOCAL- oder STATIC-Variablen anwendbar:

FUNCTION choice2(p1)

TYPE(p1) -> liefert "U"
VALTYPE(p1) -> liefert den wirklichen Typ

Mit bestem Gruß
Martin

-
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von brandelh »

mini990 hat geschrieben: type("__WIN") ergibt "U"
...
type("__WIN") ergibt "U"
...
Gruß Stefan
klar doch, das hatte ich übersehen :!:
Gruß
Hubert
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Anzahl Parameter bei Funktionsaufruf beschränkt?

Beitrag von mini990 »

Danke!
Habe die Type() Abfragen durch valType() ersetzt ---> funktioniert!

Gruß Stefan
Antworten