
Zitat von
Fuerchau
Also Datenstrukturen als Returnwert geht zwar schon (ist dann vom Typ Zeichen) aber nicht unbedingt sinnvoll, da die Schnittstelle dann nicht eindeutig ist.
Wenn eine Datenstruktur als Rückgabe-Wert definiert ist, kann sie auch als Datenstruktur empfangen werden.
In diesem Fall eine Dummy Datenstruktur an und versteckt diese in der Copy-Strecke für den Prototyp.
Der Rückgabe-Wert kann dann mit LIKEDS definiert und verwendet werden.
Beispiel:
PHP-Code:
* Copy-Strecke Prototyp
D DSQualName DS based(DummyPtr)
D Object 10A
D Library 10A
D GetQualName PR likeDS(DSQualName)
D ParmFile 10A
D ParmLib 10A
PHP-Code:
D MyFile S 10A inz('MYFILEP')
D MyLib S 10A
D DSQualFile DS likeDS(DSQualName)
*/-----------------------------------------------------
/Free
DSQualFile = GetQualName(MyFile: MyLib);
Dsply DSQualFile.Object;
Dsply DSQualFile.Library;
*inLR = *On;
/End-Free
PHP-Code:
P GetQualName B Export
D GetQualName PI likeDS(DSQualName)
D ParmObj 10A
D ParmLib 10A
D DSName DS likeDS(DSQualName)
*-------------------------------------------------------------
/Free
DSName.Object = ParmObj;
If ParmObj <> *Blanks;
If ParmLib <> *Blanks;
DSName.Library = ParmLib;
else;
DSName.Library = '*LIBL';
Endif;
EndIf;
Return DSName;
/End-Free
P GetQualName E
Ergänzung zu Dieter:
Es gibt auch noch die sogenannte Parameter-Übergabe by Constant Reference (Schlüssel-Wort CONST). Dabei wird geprüft, ob der übergebene Parameter der im Prototyp angegebenen Felddefinition entspricht. Bei Übereinstimmung wird die Adresse des Parameters an das rufende Programm oder Prozedur übergeben. Bei Abweichung wird ein temporäres Feld mit der erwarteten Definition erstellt und mit dem Paramete-Wert gefüllt. Anschliessend wird die Adresse diese neuen Feldes an das rufende Programm übergeben.
Die Parameter-Übergabe by VALUE kann zur für den Aufruf von Prozeduren verwendet werden. Für den Aufruf von Programmen ist nur eine Parameter-Übergabe by Reference möglich, auch Constant Reference.
Birgitta
Bookmarks