Hi!

I agree with Viktor that this type of access is not recommended
because it represents a great risk to system stability. But just to
illustrate, if you want to get the memory address of a particular
variable (I do not see much use in it but ..) this is an example:

[TEST.PRG]
#include "simpleio.ch"

FUNCTION Main
     LOCAL a, b, c, d, e, f, g

     a := b := "A single text"
     h := 'Other text'

     c := d := {}
     e := ( @qqout() )
     f := e
     g := @date()

     cls
     ? 'string ....:', _GETADDRESS(a), _GETADDRESS(b), _GETADDRESS(h)
     ?
     ? 'arrays ....:',_GETADDRESS(c), _GETADDRESS(d)
     ?
     ? 'pointer (1):', _GETADDRESS(e), _GETADDRESS(f)
     ?
     ? 'pointer (2):', _GETADDRESS(g), _GETADDRESS( @date() )
     ?
   RETURN NIL
// end of file

[GETADDRESS.C]
#include "hbvmopt.h"
#include "hbapi.h"
#include "hbapiitm.h"
#include "hbstack.h"

HB_FUNC( _GETADDRESS )
{
   PHB_ITEM pItem = hb_param( 1, HB_IT_ANY );
   char buffer[ 16 ];

   memset( buffer, 0, sizeof( buffer ) );

   switch( hb_itemType( pItem ) )
   {
      case HB_IT_ARRAY:
         hb_snprintf( buffer, sizeof( buffer ), "%p", ( pItem
)->item.asArray.value );
         break;

      case HB_IT_STRING:
      case HB_IT_MEMO:
         hb_snprintf( buffer, sizeof( buffer ), "%p", ( pItem
)->item.asString.value );
         break;

      case HB_IT_SYMBOL:
         hb_snprintf( buffer, sizeof( buffer ), "%p", ( pItem
)->item.asSymbol.value->value.pFunPtr );
         break;

      case HB_IT_POINTER:
         hb_snprintf( buffer, sizeof( buffer ), "%p", ( pItem
)->item.asPointer.value );
         break;

      default:
         hb_snprintf( buffer, sizeof( buffer ), "%p", 0 );
         break;
   }

   hb_retc( buffer );
}
// end of file
_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to