Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: forrest g am 01.04.03 - 18:07:37
-
hallo leute,
das ist kein aprilscherz!
folgendes problem:
- ich habe 2 scriptlibraries, wobei lib a in den option die definition use lib b besitzt
- ich wollte aus lib a eine function in lib b aufrufen und dann einen rückgabewert erhalten
=> Set doc = funcVererbenZahlAntworten( doc )
=> klappt nicht, ich lande in der fehlerroutine
- wenn die function derselben lib ist, funktioniert das
- wenn die funktion ohne rückgabewert arbeitet und über call funcname in lib b aufgerufen wird, funktioniert das
kann mir das mal einer erklären
eine lösung für das problem wäre auch cool
tschö uund danke
forrest g
-
hast du zufällig irgendwo den Begriff "Private" verwendet ??
-
hi eknori,
nein, in den options der beiden libs habe ich option public deklariert.
demnach entnehme ich das das normalerweise funktionieren sollte?
-
wie sieht das denn im Debugger aus ?? Da kannst du doch eigentlich wunderbar verfolgen, was mit deinen Varialblen etc geschieht
-
okay,
ich rufe über Set doc = funcVererbenZahlAntworten( doc ) die funktion in der anderen lib auf
dann geht der debugger wegen on error goto fehler zur sprungmarke fehler
naja, weil mir das schleierhaft war, hab ich dann die funktion in dieselbe lib reingenommen, das geht
ebenso, wenn die funktion in der anderen lib ohne rückgabewerta rbeitet
-
dann nimm doch versuchsweise mal die on error zeile raus; dann solltest du ja eine Fehlermeldung bekommen. Gibt vielleicht Aufschluß über die Ursache
-
coole idee,
type mismatch on external name (functionsname)
-
aha, werden denn die Funktionswerte richtig übergeben ? Oder versuchst du in einen String einen Integerwert zu schrfeiben ?
-
der name is richtich geschrieben
rückgabewert vom selben typ
designer und notes und db schon mehrfach geöffnet und geschlossen
ich raff das nich???
-
hab deine antwort garnich gesehen.
aufruf:
Set doc = funcVererbenZahlAntworten( doc )
aufgerufene funktion:
Function funcVererbenZahlAntworten(doc As notesdocument) As notesdocument
-
Hi,
mach doch mal eine sub draus:
sub funcVererbenZahlAntworten(docIn As notesdocument, docOut As notesdocument)
und rufe diese dann auf
funcVererbenZahlAntworten( docIn, docOut )
denn ich weiss nicht, ob das so einfach geht das aktuelle doc als Parameter übergeben und gleichzeitig wieder in sich reinschreiben.
-->Set doc = funcVererbenZahlAntworten( doc ) ???
-
hi doliman,
ich nehme halt eine function, damit ich einen rückgabewert bekommen kann.
sub gibt keinen rückgabewert zurück.
der einwand mit dem überschreiben: ich habe denselbenkram mit anfderen funktionen laufen...
das geht nur bei dieser genannten nicht!
FEHLERMELDUNG:
type mismatch on external name <functionsname>
ist denn keiner mehr wach?
was macht ihr denn alle jetzt?
okay, ihr dürft mir morgen helfen.
ciao und gute nacht
-
Hi,
sub liefert DIr einen "versteckten" Rückgabewert.
Du steckts einfach die Variable in die Du das Ergebnis haben willst als Parameter in die Sub. Funktioniert einwandfrei.
Aber stelle doch mal die DB als Anhang hier herein, dann schau ich mal rein.
-
Die Funktion muß einen Rückgabewert vom Typ Variant haben. Ist das der Fall?
-
hi wflamme,
die funktion hatte keinen rückgabewert vomtypvariant.
habe das jetzt aber getestet: leider genau dasselbe ergebnis.
FEHLERMELDUNG:
type mismatch on external name <functionsname>
bei anderen funktionenin der library arbeite ich mit rückgabewert notesdocument.
in derselben library funktiniert auch fehlerhafte funktion mit notesdocument als rückgabewert testweise.
-
chech mal bitte im Debugger, wo das Script genau aussteigt..schon beim Aufruf oder in der Function erst beim Abarbeiten..wird oben nicht ganz klar.
-
hi rob,
steigt beim funktionsaufruf aus.
geht also garnich erst in die funktion
-
declare mal testhalber die function als static...es sieht fast so aus, als ob der Compiler checken will, was denn dieses function(doc) vom Typ zurückgeben soll und kann nicht, da Doc den Wert verliert, weil außerhalb Reichweite in eigentlicher Funktion. Denn in der gleichen Lib geht es, sagst Du.
-
Dann weiß ich auch nichts mehr, außer vielleicht nochmal explizit libB zu öffnen, zu kompilieren und dann dasselbe nochmal mit libA zu machen.
Und.. hast Du vielleicht irgendwo Code per CopyPaste in die libB eingefügt? Hatte schon ähnliche Probleme, wenn Sonderzeichen/Steuerzeichen in den Source reingeraten waren.
PS: Den Variant-Effekt, den ich als Lösung vorgeschlagen habe, hat mir auch schon geholfen, das ist mir bei Versionen vor 5.02 ab und an passiert, daß ich nur primitive Datentypen zurückgeben konnte, besonders bei vorcompilierten Libraries. Warum weiß keine S.. :-\
-
is mir auch schon öfter passiert - wenn du an der benutzten Bibliothek was änderst und die nutzende Bibliothek danach nicht neu kompilierst, dann kann der Fehler auftreten, weil die nutzende immer noch mit der "alten" Bibliothek arbeitet.
Probier mal, neu zu kompilieren (unten in der Statuszeile muss angezeigt werden, dass kompiliert wird)
-
hallo zusammen,
vielen dank erstmal für die hilfe.
konnte gestern wegen famileienfeier nicht aktiv werden.
habe heute morgen alle tipps durchgeschaut.
and the winner is...(sorry, kleiner scherz-okay ich weiss, dass ich nich witzisch bin!): potsmoker!
@potsmoker,
ich hab heute beide libs nochmals kompiliert und der s... funktioniert.
vielleicht haben dem rechner die paar stunden ruhe gutgetan, denn weil ich den funktionsaufruf
verändert habe, hab ich beide libs auch gespeichert.
vielen dank, speichern und kompilieren hat geholfen.
@doliman,
sorry, habe deinen eintrag übersehen.
das mit dem versteckten rückgabewert wusste ich nicht. wie ist dann der aufruf der sub?
so wie du oben beschrieben hast, sub(parameter raus, parameter rein)?
@wflamme,
leider hat der variant-effekt nicht funktioniert. das komische ist das genau dasselbe mit anderen funktionen läuft.
...aber ich glaube, dass ich besagte funktion von sub zu function verändert habe, da mir während der programmierung
die notwendigkeit eiens rückgabewertes klar wurde
tschö
-
Hi,
ja, Aufruf wie Funktion
call sub(...)
-
danke für den tip, doliman.
tschö
-
Hi,
keine Ursache