GET-POINTER-VALUE - Unix行为?

时间:2012-03-21 15:47:49

标签: progress-4gl

*如何使用GET-POINTER-VALUE ....获取具有进度的mem指针? 在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   
---------------------------

请HEEEEEELLLLPPPPP !!!! *

2 个答案:

答案 0 :(得分:0)

我刚试过10.2B Linux上的代码。它似乎有效:

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

知道我们知道您在HPUX上运行64位Progress v9 ...

在64位环境中,GET-POINTER-VALUE()返回64位结果。但Progress v9没有int64数据类型。尝试将结果分配给DECIMAL变量。这应该能够保持价值。

答案 1 :(得分:0)

HP-UX 64位AVM不会为某些版本执行64位指针,因为外部接口只能执行32位。我忘记了哪个版本实现了完整的64位指针 - 这将是一个问PSC TS的问题。