新規投稿 記事一覧 ホーム
●ご利用方法,ご利用に際しての規約はこちらをお読みください。
こちらからの投稿は、先頭に表示されているコメントへの返信になります。
RE:プロシージャーの戻り値の複数定義は可能ですか IKD さん [ 10月24日(金) 14時35分 ]

    こちらこそ、お世話になります。
    プロシージャーの戻り値を複数定義することはできません。
    しかし、現実はご指摘のように結果として TRUE または FALSE を
    戻して、TRUE であれば、初めて戻り値を取得したい、というような
    処理の必要性があります。
    これを解決するにはプロシージャーのパラメータにポインターを
    定義することです。
    ポインターをパラメータとして渡して、渡されたプロシージャー側で
    そのポインターを基底とする変数を更新してやれば元の変数の実体を変更することが
    できます。
    この手法は他の言語でもよく使用されている方法です。
    下記にそのサンプルをご紹介します。
    この例では品種名 HNSNAM のポインターをパラメータ値として渡しています。
    このようなテクニックは EnterpriseServer Ver5.1 のヘルプでも
    詳細な解説を予定しています。

    Source: http://218.44.135.18/QSYS.LIB/PGMRLIB.LIB/QRPGLESRC.FILE/TESTPTR.MBR

    0001.00 H DFTNAME(TESTPTR) DATEDIT(*YMD/) DFTACTGRP(*NO)                       
    0002.00 F**********  品種マスターの照会 ***************************************
    0003.00 FHINSHU    IF   E           K DISK                                     
    0004.00 F**********************************************************************
    0005.00 D GET_HINSHU      PR             4S 0                                  
    0006.00 D  HNSCOD                        4A   VALUE                            
    0007.00 D  HNSNAM_P                       *   VALUE                            
    0008.00                                                                        
    0009.00 D RES             S              4S 0                                  
    0010.00 D TRUE            S              4S 0 INZ(0)                           
    0011.00 D FALSE           S              4S 0 INZ(-1)                          
    0012.00                                                                        
    0013.00 C                   MOVEL     '0001'        HNSCOD                     
    0014.00 C                   EVAL      RES = GET_HINSHU(HNSCOD: %ADDR(HNSNAM))  
    0015.00 C                   IF        RES = TRUE                               
    0016.00 C*  ( 取得成功 ! )                                                     
    0017.00 C     'HNSNAM='     CAT(P)    HNSNAM:0      DSP40            40        
    0018.00 C     DSP40         DSPLY                   ANS               1        
    0019.00 C                   ELSE                                               
    0020.00 C*  ( 取得失敗 ! )                                                     
    0021.00 C     'FAILED'      DSPLY                   ANS                      
    0022.00 C                   END                                              
    0023.00 C                   SETON                                        LR  
    0024.00 C******************************************************              
    0025.00  *   GET_HINSHU :   品種名の取得                                     
    0026.00 C******************************************************              
    0027.00 P GET_HINSHU      B                   EXPORT                         
    0028.00 D                 PI             4S 0                                
    0029.00 D  HNSCOD                        4A   VALUE                          
    0030.00 D  HNSNAM_P                       *   VALUE                          
    0031.00                                                                      
    0032.00 D  RTNNAME        S             14    BASED(HNSNAM_P)                
    0033.00 C                   SETOFF                                       99  
    0034.00 C     HNSCOD        CHAIN     HINSHU                             99  
    0035.00 C     *IN99         IFEQ      *OFF                                   
    0036.00 C                   MOVEL     HNSNAM        RTNNAME                  
    0037.00 C                   RETURN    TRUE                                   
    0038.00 C                   ELSE                                             
    0039.00 C                   RETURN    FALSE                                  
    0040.00 C                   END                                              
    0041.00 P                 E                                                  

    RE:プロシージャーの戻り値の複数定義は可能ですか 伊集院博 さん [ 10月24日(金) 16時55分 ]

      なるほど...。
      戻り値のポインターを返す事ができるのですね。
      これであれば戻り値を複数定義する事も可能ですね。
      色々応用できそうです。
      ありがとうございました。

お名前
パスワード
e-mailアドレス
タイトル
ホームページ
アドレス