【问题标题】:GET-POINTER-VALUE - Unix behaivor?GET-POINTER-VALUE - Unix 行为?
【发布时间】:2012-03-21 15:47:49
【问题描述】:

*如何使用 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!!!!*

【问题讨论】:

    标签: progress-4gl


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我刚刚在 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 变量。那应该可以保值。

      【讨论】:

      • 测试了您的用户帐户的哪些权限?
      • 我正在使用 HP-UX / 64bits ,有人知道这是否可能是错误的原因吗?
      • 它可能是。看我的另一个答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 2012-05-13
      • 2021-04-18
      • 1970-01-01
      • 2022-12-01
      相关资源
      最近更新 更多