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   
---------------------------

请 HEEEEEELLLLPPPPP!!!!*

4

2 回答 2

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 变量。那应该能够保持价值。

于 2012-03-21T16:17:53.083 回答
0

HP-UX 64 位 AVM 对于某些版本不支持 64 位指针,因为外部接口只支持 32 位。不过我忘记了哪个版本实现了完整的 64 位指针——这将是一个要问 PSC TS 的问题。

于 2012-03-22T01:32:54.703 回答