The record had probably been deleted. According to the docs, you should
check this first before calling the function, otherwise "it could display a
fatal error message". DmRecordInfo() should do the trick.
Hmm...I was wondering about this (*memHandle) that causes an exception....it
shouldn't, should it. Maybe the address is even boundary?
- bobby
-----Original Message-----
From: ccoleman [mailto:[EMAIL PROTECTED]]
Sent: Friday, November 03, 2000 4:05 PM
To: Palm Developer Forum
Subject: Invalid, non-NULL handle returned by DmQueryRecord?
Hello,
I'm writing an application that will allow the user to browse around
through all the databases on the Palm and view a listing of the sizes
of each record in a selected database. Except for while viewing one
particular database, the application works perfectly.
The problem that I'm encountering is that when I try to check the size
of the Giraffe High Score database's single entry, I get a Fatal
Exception. I could just prevent the user from trying to view this
database in particular, but I'm concerned that there may be other apps
out there with databases that cause the same problem.
Here is the snippet of code that is causing me problems:
----------------------------------------------------------------------
UInt32 nRecordSize ;
MemHandle RecordHandle ;
DmOpenRef dbCurrentDatabase ;
...
dbCurrentDatabase = DmOpenDatabase ( pCurrentItem->nCardNo,
pCurrentItem->localID,
dmModeReadOnly ) ;
...
// Note that if dbCurrentDatabase is NULL, we don't get to this point.
RecordHandle = DmQueryRecord ( dbCurrentDatabase,
nIndex ) ;// nIndex is 0 in this case
if ( RecordHandle == NULL )
{
StrCopy ( sBuffer, "0 bytes" ) ;
}
else
{
nRecordSize = MemHandleSize ( RecordHandle ) ;
// Fatal Exception reported on above line
StrPrintF ( sBuffer,
"%lu bytes",
nRecordSize ) ;
}
----------------------------------------------------------------------
In the CodeWarrior debugger, I can see that RecordHandle is definitely
not NULL, but pressing the plus next to it shows that what it points
to (labeled as *RecordHandle) has a value of -1. Normal handles seem
to have positive values. I tried to check if ( *RecordHandle < 0 ) to
prevent this handle from being passed to MemHandleSize, but just
de-referencing the handle in the code causes the fatal exception.
Does anyone know if there's a way I can check the validity of a handle
that isn't NULL? There doesn't seem to be any function out there that
will do this. Most of the time, it seems that DmQueryRecord either
returns NULL or a valid handle.
If no one has any ideas about that, is there something special about
the Giraffe High Score database? Maybe it's stored in a special area
of memory? If so, is there a way I can determine that in code?
Thanks,
Curt Coleman
[EMAIL PROTECTED]
--
For information on using the Palm Developer Forums, or to unsubscribe,
please see http://www.palmos.com/dev/tech/support/forums/
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/tech/support/forums/