Yes, I'm doing that. In the previos piece of code I'm trying to just get a
pointer to the handle so that I *can* lock  the memory when I need it.. even
when I lock the handle to get a pointer.. I get he "low memry" err.

Dan Massey wrote:

> You have to use MemHandleLock to lock the handles to get access to the
> pointers. You can not use a handle to manipulate the data directly. A handle
> "points" to a movable chunk of memory. You have to lock it down in order to
> get a pointer into the memory allocated for that handle. When you're done
> temporarily accessing the data, you need to unlock the pointer/handle to
> allow the memory chunk to move again.
> -----Original Message-----
> From: Philip J. Matheson <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED] <[EMAIL PROTECTED]>
> Date: Thursday, May 06, 1999 2:00 PM
> Subject: Re: Wicked Confused about memory (Part Duh!)
>
> Here's a little snippet from the Palm Companion Doc..
>
> -->> Don�t access globals or hardware directly
>
> ok.. I'm not really trying to access globals, but everything I try to do
> with
> my data structures gives me a "Trying to write/read from low memory area"..
>
> how do I not do this? How do I go about accessing these indirectly?  I seem
> to
> be missing something very importent because I cannot store and pass around
> data without getting this error.  The only data I can deal with is DB
> stuff..
> but I would like to manipulate data before I put it in the database. Heres
> and
> example:
>
> static void DataBank(VoidHand* BuffHandle, VoidHand* DynHandle, VoidHand
> *StatHandle)
> {
>
> static VoidHand Buff;
> static VoidHand Dyn;
> static VoidHand Stat;
>
> Buff = MemHandleNew(sizeof(MovementRecord)+1);
> Dyn = MemHandleNew(sizeof(DynamicRecordingInfo)+1);
> Stat = MemHandleNew(sizeof(StaticRecordingInfo)+1);
> *BuffHandle = Buff;
> *DynHandle = Dyn;
> *StatHandle = Stat;
>
> }
>
> After trying numerous other approaches with global variables. I decided to
> create this function.. My hope is that the memory allocated here will be
> static and not in "low memory" so that any time I need a handle to these
> chunks I can just call this function and get a pointer to the handle.  I
> still
> get the low memory err.  What am I missing? It seems that no matter where I
> call MemHandleNew I can not use that memory..
>
> Thank You,
>
> Philip J.
>
> Gabe Dalbec wrote:
>
> > In your code snip below, it seems you are unlocking the memory
> > handle before you are done using it.  You can't call MemHandleUnlock
> > until you won't be using the locked location.  So move the MemHandleUnlock
> > to right before the return.  Or use the FldGetTextPtr(fld) as the string
> > to pass to checkDBName rather than LCurrentStatPtr->NameString.
> >
> > -Gabe
> > Palm Creations
> >
> > static Boolean DatabaseOkButtonHook(void)
> > {
> >       StaticRecordingInfo *LCurrentStatPtr;
> >       FieldPtr fld  = GetObjectPtr(databaseNameStringField);
> >
> >       gCurrentStatHand = MemHandleNew(sizeof (StaticRecordingInfo));
> >       LCurrentStatPtr = MemHandleLock(gCurrentStatHand);
> >
> >      //here we're copying the new database name into memory
> >       if (FldGetTextPtr(fld) != NULL)
> >      {
> >     StrCopy(LCurrentStatPtr->NameString, FldGetTextPtr(fld));
> >      }
> >       MemHandleUnlock(gCurrentStatHand);
> >
> >       if ( checkDBName(LCurrentStatPtr->NameString) )
> >      {
> >           FrmGotoForm(RecordForm);
> >      }
> >      else
> >      {
> >           FrmAlert(DbnameAlert);
> >      }
> >     return 0;
> >  }

Reply via email to