0

*GET-POINTER-VALUE を使用して進行中のメモリ ポインターを取得するにはどうすればよいですか? Windows では正常に動作します:

DEFINE VARIABLE vUNO  AS MEMPTR.
DEFINE VARIABLE vDOS  AS MEMPTR.
DEFINE VARIABLE vTRES AS MEMPTR.
DEFINE VARIABLE sUNO  AS CHARACTER.
DEFINE VARIABLE sDOS  AS CHARACTER.
DEFINE VARIABLE sTRES AS CHARACTER.
DEFINE VARIABLE rUno  AS MEMPTR.
/*Para prueba, poner algo a UNO, DOS y TRES.*/
DEFINE VARIABLE PTR AS MEMPTR.
ASSIGN sUNO                 = "Uno" 
       sDOS                 = "Dos" 
       sTRES                = "Tres"

       SET-SIZE(vUNO  )     = LENGTH(sUNO ) * 2
       SET-SIZE(vDOS  )     = LENGTH(sDOS ) * 2 
       SET-SIZE(vTRES )     = LENGTH(sTRES) * 2

       PUT-STRING(vUNO , 1) = sUNO                  
       PUT-STRING(vDOS , 1) = sDOS 
       PUT-STRING(vTRES, 1) = sTRES.
SET-SIZE(PTR) =  4  /*Apuntador a vUNO  -> 1*/
               + 4  /*Apuntador a vDOS  -> 5*/
               + 4. /*Apuntador a vTRES -> 9*/
/* 
  NOTA: 
       4 porque en arquitcturas a 32 bits apuntadores miden 4 bytes. 
       Checar en Unix porque Hp-Ux (de Axa) es a 64 bits (apuntadores a 8 bytes).
*/
/* [1] 2 3 4 [5] 6 7 8 [9] 10 11 12 */
MESSAGE PROGRAM-NAME(1) SKIP                          
    GET-STRING(vUNO,1 ) "/" GET-POINTER-VALUE(vUNO)  SKIP    
    GET-STRING(vDOS,1 ) "/" GET-POINTER-VALUE(vDOS)  SKIP
    GET-STRING(vTRES,1) "/" GET-POINTER-VALUE(vTRES) SKIP
    VIEW-AS ALERT-BOX INFO BUTTONS OK.

/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** / 戻り値:

---------------------------
Información
---------------------------
C:\GMM2000\Temp\p19350.cmp 
Uno / 87066920 
Dos / 85914720 
Tres / 85914744 
---------------------------
Aceptar   
---------------------------

しかし同じコードで Unix は以下を返します:

---------------------------
Información
---------------------------
/gmm2000/p13659.cmp 
Uno / ? 
Dos / ? 
Tres / ? 
---------------------------
Aceptar   
---------------------------

お願いします HEEEEEELLLLPPPPPP!!!!*

4

2 に答える 2

0

10.2BLinuxでコードを試しました。それはうまくいくようです:

  ┌────────── Information ──────────┐
  │ /home/tom/p04012_Untitled1.ped  │
  │         Uno / 16817200          │
  │         Dos / 16992512          │
  │        Tres / 16992544          │
  │ ─────────────────────────────── │
  │              <OK>               │
  └─────────────────────────────────┘

HPUXで64ビットProgressv9を実行していることがわかっています...

64ビット環境では、GET-POINTER-VALUE()は64ビットの結果を返します。ただし、Progressv9にはint64データ型がありません。結果をDECIMAL変数に割り当ててみてください。それは価値を保持することができるはずです。

于 2012-03-21T16:17:53.083 に答える
0

HP-UX 64 ビット AVM は、一部のリリースでは 64 ビット ポインターを実行しません。これは、外部インターフェイスが 32 ビットしか実行できないためです。完全な 64 ビット ポインターを実装したバージョンを忘れてしまいましたが、PSC TS に質問する必要があります。

于 2012-03-22T01:32:54.703 に答える