[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2004
    Beiträge
    50

    Fehlerauswertung von "Unix-type" API's

    Hallo!

    Wollte ein Test-Programm erstellen für Kommunikation per 'sockets' zwischen Windows-PC und AS/400.
    Und zwar in ILE COBOL. Irgendwann hatte ich es dann auch geschafft mit CRTBNDCBL ein Programm zu erstellen nachdem das richtige Bindeprogramm mit der 'socket'-API gefunden war (google sei Dank). Dann wurde folgender Befehl eingebaut:
    CALL PROCEDURE 'socket' USING P1 P2 P3 RETURNING R1.
    P1=1, P2=1, P3=0
    (diese Werte habe ich dem 'socket' Member in QSYSINC/SYS entnommen)
    Es kam '-1' zurück in Feld R1. Das bedeutet es ist ein Fehler aufgetreten.
    Dazu habe ich dann gleich mehrere Fragen:
    - die Definitionen der einzelnen Felder scheint es nur in C-Syntax zu geben; oder gibt es doch irgendwo Definitionen für ILE Cobol?
    - wie erhalte ich nun den "vollständigen" Fehlercode, sprich einen aussagekräftigen Fehlerhinweis?
    - gibt es Beispiele in ILE Cobol für die Kommunikation über 'Sockets' ?

    Beste Grüße
    Neptun

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Gerade bei der Verwendung von C-Funktionen ist es wichtig die Art des Aufrufes genau anzugeben.
    Man unterscheidet zwischen "call .... by reference .... by value ...", wobei alle Aufrufe auch gemischt vorkommen können.
    Das Beispiel der Funktion Socket() müsste daher so aussehen:

    * Definition Binär-Felder (int)
    77 Address-Family pic s9(9) comp-4.
    77 Type pic s9(9) comp-4.
    77 Protocoll pic s9(9) comp-4.
    77 Socket-Num pic s9(9) comp-4.

    call procedure "socket" by value Address-family Type Protocoll returning Socket-Num

    Fehler stehen dann ja in "errno", die als externe Variable deklariert werden muss:
    77 errno pic s9(9) comp-4 external.

    Hier könnte jedoch die Groß/Kleinschreibung ggf. ein Problem werden.

    Ein Beispiel für Socket-Programmierung habe ich nicht, aber vielleicht findest du ja was bei google.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jul 2004
    Beiträge
    50
    @fuerchau
    Das mit 'errno ... external' wusste ich nicht, danke!!!
    Mit der Übergabe von 'BY REFERENCE' oder 'BY VALUE' (manchmal auch 'BY CONTENT') habe ich mich schon bei der ODBC-Programmierung einer anderen Anwendung (ebenfalls COBOL) 'rumgeschlagen'
    Grundsätzlich kann man wohl sagen das reine Eingabeparameter mit 'BY VALUE' übergeben werden und Ausgabeparameter immer 'BY REFERENCE' benötigen ... (aber wem sag ich das ...)
    Werde dann die entsprechende 'BY ...' Syntax mit einbauen.

    Die Groß-/Kleinschreibung scheint durch den Umwandlungsparameter [OPTION(*NOMONOPRC)] gelöst werden zu können ... jedenfalls wurde dann 'socket' nicht mehr auf 'SOCKET' im Befehl 'CALL PROCEDURE' umgesetzt.


    Beste Grüße
    Neptun

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Das Problem ist die Variable "errno", die natürlich Klein geschrieben wird.

    "By content" sind immer Single-Datentypen (int, char, float, long, double, byte, ...)
    "By reference" sind immer Pointer (Adressen) in der C-Syntax char*, long*, int*, ...

    Ausgabeparameter können sowohl Single-Daten sein (sprich Felder) oder Adressen (Pointer).
    Pointer sind in COBOL etwas schwieriger:
    77 MyPointer usage pointer.

    Linkage Section.

    01 MyVar pic x(..).

    * MyVar wird nun NICHT in der Procedure-Division mit "using" aufgeführt.
    Die Adresse wird mit:
    "set address of MyVar to mypointer" gesetzt !!! (goil nicht ?)

    MyVar kann sowohl Strukturen als auch wieder Single-Data enthalten.
    Beispiel ist "struct tm *localtime()", diese Funktion liefert einen Pointer auf eine Struktur.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. QDBCRTHA + QDBRUNHA API's
    By Winnilein in forum NEWSboard Programmierung
    Antworten: 18
    Letzter Beitrag: 11-11-05, 07:47
  2. SQL CLI Apis: Datenbankverindung trennen
    By sim in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 30-08-04, 07:30
  3. QSPGETSP Spool nach PF mit APIs
    By jsiegel in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 22-06-04, 20:37
  4. API's für lotus notes
    By karin-vogelmann in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 31-10-01, 18:53
  5. APIs
    By Zehetner in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 10-10-01, 12:09

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •