You r not doing type cast, which may work in C but is required in C++.
Simply change the following changes :
1)
Change :
fldP = FrmGetObjectPtr(FrmGetActiveForm(),
FrmGetObjectIndex(FrmGetActiveForm(), UpdateNumberField));
To :
fldP = (FieldType *)FrmGetObjectPtr(FrmGetActiveForm(),
FrmGetObjectIndex(FrmGetActiveForm(), UpdateNumberField));
2)
Change :
StrCopy( MemHandleLock( txtH ), String );
To :
StrCopy( (char *) MemHandleLock( txtH ), String );
thats all.
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of
[EMAIL PROTECTED]
Sent: Wednesday, June 13, 2001 12:10 AM
To: Palm Developer Forum
Subject: Here is my source and what I am trying to do.
This is one of my errors I KEEP getting. Please explain it to me and how to
solve it.
Warning : function has no prototype
Starter.cpp line 36 {
Error :
illegal implicit conversion from 'void *' to
'FieldType *'
Starter.cpp line 40
FrmGetObjectIndex(FrmGetActiveForm(), UpdateNumberField));
Error : illegal implicit conversion
from 'void *' to
'char *'
Starter.cpp line 46
StrCopy( MemHandleLock( txtH ), String );
Error : ';' expected
Starter.cpp line 481
SetField( UpdateNumberField,focusindexed);
What I am trying to do.
I am trying to make it so that when the user scans a barcode it will print
the barcode number of the UpdateNumberField. This is for the Symbol Palm.
I HAVE successfully Inied the palm scanning device and the scanner works. I
need help on the conversion though and displaying the barcode number in the
UpdateNumberField. Please help me! Thanks!
/***************************************************************************
***
*
* Copyright (c) 1999 Palm Computing, Inc. or its subsidiaries.
* All rights reserved.
*
* File: Starter.cpp
*
****************************************************************************
*/
#include <PalmOS.h>
#include "StarterRsc.h"
#include <HwrMiscFlags.h> // gives HwrBatteryLevel
#include "ScanMgrDef.h" // scan manager constants
#include "ScanMgrStruct.h" // scan manager structures
#include "ScanMgr.h" // scan manager API functions
//Prototypes
int ScanOpenDecoder();
int ScanCloseDecoder();
static Boolean OnDecoderData(); // GetSerialData();
static Boolean bOpenDecoderOK = false;
static Boolean Auto_Scan = false;
int ScanIsPalmSymbolUnit();
void SetFieldText( UInt16 nFieldID, const Char * pSrcText, Int16 nMaxSize,
Boolean bRedraw );
static Boolean MainFormHandleEvent(EventPtr event);
static Boolean ApplicationHandleEvent (EventPtr event);
Boolean extendedData;
int extendedDataLength;
MemHandle hExtendedData;
unsigned char *pExtendedData;
int extendedDataType;
void SetField( Word Field, CharPtr String )
{
Handle txtH;
FieldPtr fldP =0;
fldP = FrmGetObjectPtr(FrmGetActiveForm(),
FrmGetObjectIndex(FrmGetActiveForm(), UpdateNumberField));
if(FldGetTextLength(fldP)>0)
FldFreeMemory (fldP);
txtH = MemHandleNew( StrLen( String ) + 1 );
StrCopy( MemHandleLock( txtH ), String );
MemHandleUnlock( txtH );
FldSetTextHandle( fldP, txtH );
}
/***********************************************************************
*
* Entry Points
*
***********************************************************************/
/***********************************************************************
*
* Internal Structures
*
***********************************************************************/
typedef struct
{
UInt8 replaceme;
} StarterPreferenceType;
typedef struct
{
UInt8 replaceme;
} StarterAppInfoType;
typedef StarterAppInfoType* StarterAppInfoPtr;
/***********************************************************************
*
* Global variables
*
***********************************************************************/
//static Boolean HideSecretRecords;
/***********************************************************************
*
* Internal Constants
*
***********************************************************************/
#define appFileCreator 'STRT'
#define appVersionNum 0x01
#define appPrefID 0x00
#define appPrefVersionNum 0x01
// Define the minimum OS version we support (2.0 for now).
#define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0)
/***********************************************************************
*
* Internal Functions
*
***********************************************************************/
void SetFieldText( UInt16 nFieldID, const Char * pSrcText, Int16 nMaxSize,
Boolean bRedraw )
{
MemHandle hFieldText;
Char * pFieldText;
FieldPtr pField;
// pField = (FieldPtr)GetObjectPtr( nFieldID );
// if( !pField )
return;
hFieldText = FldGetTextHandle( pField );
if( !hFieldText )
hFieldText = MemHandleNew( nMaxSize );
// If already allocated, make sure it can handle nMaxSize already.
// If not, realloc that buffer
else
{
UInt32 curSize = MemHandleSize( hFieldText );
if( curSize < nMaxSize )
MemHandleResize(hFieldText, nMaxSize ) ;
}
if( hFieldText )
{
int len = StrLen(pSrcText);
pFieldText = (Char * )MemHandleLock( hFieldText );
if (len > nMaxSize)
{
StrNCopy( pFieldText, pSrcText, nMaxSize-1);
pFieldText[nMaxSize-1] = '\0';
}
else
StrCopy( pFieldText, pSrcText );
MemHandleUnlock( hFieldText );
FldSetTextHandle( pField, (MemHandle)hFieldText );
FldSetTextAllocatedSize( pField, nMaxSize );
FldSetMaxChars( pField, nMaxSize-1);
FldRecalculateField( pField, true );
if( bRedraw )
FldDrawField( pField );
}
}
/***********************************************************************
*
* FUNCTION: RomVersionCompatible
*
* DESCRIPTION: This routine checks that a ROM version is meet your
* minimum requirement.
*
* PARAMETERS: requiredVersion - minimum rom version required
* (see sysFtrNumROMVersion in SystemMgr.h
* for format)
* launchFlags - flags that indicate if the application
* UI is initialized.
*
* RETURNED: error code or zero if rom is compatible
*
* REVISION HISTORY:
*
*
***********************************************************************/
static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags)
{
UInt32 romVersion;
// See if we're on in minimum required version of the ROM or later.
FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
if (romVersion < requiredVersion)
{
if ((launchFlags & (sysAppLaunchFlagNewGlobals |
sysAppLaunchFlagUIApp)) ==
(sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp))
{
FrmAlert (RomIncompatibleAlert);
// Palm OS 1.0 will continuously relaunch this app unless we
switch to
// another safe one.
if (romVersion < ourMinVersion)
{
AppLaunchWithCommand(sysFileCDefaultApp,
sysAppLaunchCmdNormalLaunch, NULL);
}
}
return sysErrRomIncompatible;
}
return errNone;
}
/***********************************************************************
*
* FUNCTION: GetObjectPtr
*
* DESCRIPTION: This routine returns a pointer to an object in the current
* form.
*
* PARAMETERS: formId - id of the form to display
*
* RETURNED: void *
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void * GetObjectPtr(UInt16 objectID)
{
FormPtr frmP;
frmP = FrmGetActiveForm();
return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID));
}
/***********************************************************************
*
* FUNCTION: MainFormInit
*
* DESCRIPTION: This routine initializes the MainForm form.
*
* PARAMETERS: frm - pointer to the MainForm form.
*
* RETURNED: nothing
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void MainFormInit(FormPtr /*frmP*/)
{
Err error;
// first check and be sure we're running on Palm/Symbol hardware
if (ScanIsPalmSymbolUnit())
{
error = ScanOpenDecoder(); // open the scan manager library
if (!error)
{
bOpenDecoderOK = true; // set global variable that all is well
ScanCmdScanEnable(); // Enable scanning
}
else
FrmAlert( ErroAlert );
}
else
// Initialize and draw the main form.
FrmGotoForm( MainForm );
}
/***********************************************************************
*
* FUNCTION: MainFormDoCommand
*
* DESCRIPTION: This routine performs the menu command specified.
*
* PARAMETERS: command - menu item id
*
* RETURNED: nothing
*
* REVISION HISTORY:
*
*
***********************************************************************/
static Boolean MainFormDoCommand(UInt16 command)
{
Boolean handled = false;
FormPtr frmP;
switch (command)
{
case MainOptionsAbout:
MenuEraseStatus(0); // Clear the menu status
from the display.
frmP = FrmInitForm (AboutForm);
FrmDoDialog (frmP); // Display the About Box.
FrmDeleteForm (frmP);
handled = true;
break;
}
return handled;
}
/***********************************************************************
*
* FUNCTION: MainFormHandleEvent
*
* DESCRIPTION: This routine is the event handler for the
* "MainForm" of this application.
*
* PARAMETERS: eventP - a pointer to an EventType structure
*
* RETURNED: true if the event has handle and should not be passed
* to a higher level handler.
*
* REVISION HISTORY:
*
*
***********************************************************************/
static Boolean MainFormHandleEvent(EventPtr eventP)
{
Boolean handled = false;
FormPtr frmP;
Boolean bHandled = false;
switch (eventP->eType)
{
case menuEvent:
return MainFormDoCommand(eventP->data.menu.itemID);
case frmOpenEvent:
frmP = FrmGetActiveForm();
MainFormInit( frmP);
FrmDrawForm ( frmP);
handled = true;
break;
// Check to see if the pen is down on a button
case ctlSelectEvent:
{
handled = true; // assume we'll handle it
switch (eventP->data.ctlSelect.controlID)
{
//Main Form
// Update Button
case MainUpdateButton:
WinEraseWindow();
frmP=FrmInitForm(UpdateForm);
FrmDoDialog (frmP);
FrmDeleteForm (frmP);
ScanCmdScanEnable();
handled = true;
break;
// Main Form Add New Button
case MainAddNewButton:
WinEraseWindow();
frmP=FrmInitForm(AddNewForm);
FrmDoDialog (frmP);
FrmDeleteForm (frmP);
// SetFieldText(AddNewNameField, "No Data", 20, false );
handled = true;
break;
case AddNewSaveButton:
SndPlaySystemSound(sndAlarm);
// SetFieldText( AddNewNameField, "No Scan", 30, true );
break;
//Update Form Cancel Button
case UpdateUpdateCancelButton:
WinEraseWindow();
frmP = FrmInitForm (MainForm);
FrmDoDialog (frmP);
FrmDeleteForm (frmP);
ScanCmdScanDisable();
ScanCloseDecoder();
handled = true;
break;
case UpdateUpdateOkButton:
WinEraseWindow();
frmP=FrmInitForm(AddNewForm);
FrmDoDialog (frmP);
FrmDeleteForm (frmP);
handled=true;
break;
// Add New Form
case AddNewCancelButton:
WinEraseWindow();
frmP=FrmInitForm(MainForm);
FrmDoDialog (frmP);
FrmDeleteForm (frmP);
handled = true;
break;
break;
}
}
}
return handled;
}
/***********************************************************************
*
* FUNCTION: AppHandleEvent
*
* DESCRIPTION: This routine loads form resources and set the event
* handler for the form loaded.
*
* PARAMETERS: event - a pointer to an EventType structure
*
* RETURNED: true if the event has handle and should not be passed
* to a higher level handler.
*
* REVISION HISTORY:
*
*
***********************************************************************/
static Boolean AppHandleEvent(EventPtr eventP)
{
UInt16 formId;
FormPtr frmP;
if (eventP->eType == frmLoadEvent)
{
// Load the form resource.
formId = eventP->data.frmLoad.formID;
frmP = FrmInitForm(formId);
FrmSetActiveForm(frmP);
// Set the event handler for the form. The handler of the currently
// active form is called by FrmHandleEvent each time is receives an
// event.
switch (formId)
{
case MainForm:
FrmSetEventHandler(frmP, MainFormHandleEvent);
break;
default:
// ErrFatalDisplay("Invalid Form Load Event");
break;
}
return true;
}
return false;
if (eventP->eType==scanDecodeEvent)
{
MESSAGE decodeDataMsg;
int status = ScanGetDecodedData(&decodeDataMsg);
if(status==STATUS_OK)
{
FormPtr form = FrmGetActiveForm();
if (decodeDataMsg.length==2 && decodeDataMsg.data[0] == 'N'
&&
decodeDataMsg.data[1]=='R')
return true;
int focusindexed
SetField( UpdateNumberField,focusindexed);
if (form)
{
//int focusindexed=FrmGetFocus(form);
if(focusindexed >= 0 && focusindexed < 65535)
{
if(FrmGetObjectType(form,focusindexed)==frmFieldObj)
{
FieldPtr focusField =
(FieldPtr) FrmGetObjectPtr(form,
focusindexed);
if (focusField->attr.editable)
FldInsert(focusField,(CharPtr)
decodeDataMsg.data,
decodeDataMsg.length);
}
}
}
}
return true;
}
}
/***********************************************************************
*
* FUNCTION: AppEventLoop
*
* DESCRIPTION: This routine is the event loop for the application.
*
* PARAMETERS: nothing
*
* RETURNED: nothing
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void AppEventLoop(void)
{
UInt16 error;
EventType event;
do {
EvtGetEvent(&event, evtWaitForever);
if (! SysHandleEvent(&event))
if (! MenuHandleEvent(0, &event, &error))
if (! AppHandleEvent(&event))
FrmDispatchEvent(&event);
} while (event.eType != appStopEvent);
}
/***********************************************************************
*
* FUNCTION: AppStart
*
* DESCRIPTION: Get the current application's preferences.
*
* PARAMETERS: nothing
*
* RETURNED: Err value 0 if nothing went wrong
*
* REVISION HISTORY:
*
*
***********************************************************************/
static Err AppStart(void)
{
StarterPreferenceType prefs;
UInt16 prefsSize;
// Read the saved preferences / saved-state information.
prefsSize = sizeof(StarterPreferenceType);
if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize,
true) !=
noPreferenceFound)
{
}
return errNone;
}
/***********************************************************************
*
* FUNCTION: AppStop
*
* DESCRIPTION: Save the current state of the application.
*
* PARAMETERS: nothing
*
* RETURNED: nothing
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void AppStop(void)
{
StarterPreferenceType prefs;
ScanCmdScanDisable();
ScanCloseDecoder();
// Write the saved preferences / saved-state information. This data
// will be backed up during a HotSync.
PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum,
&prefs, sizeof (prefs), true);
// Close all the open forms.
FrmCloseAllForms ();
}
/***********************************************************************
*
* FUNCTION: StarterPalmMain
*
* DESCRIPTION: This is the main entry point for the application.
*
* PARAMETERS: cmd - word value specifying the launch code.
* cmdPB - pointer to a structure that is associated with the
launch code.
* launchFlags - word value providing extra information about
the launch.
*
* RETURNED: Result of launch
*
* REVISION HISTORY:
*
*
***********************************************************************/
static UInt32 StarterPalmMain(UInt16 cmd, MemPtr /*cmdPBP*/, UInt16
launchFlags)
{
Err error;
error = RomVersionCompatible (ourMinVersion, launchFlags);
if (error) return (error);
switch (cmd)
{
case sysAppLaunchCmdNormalLaunch:
error = AppStart();
if (error)
return error;
FrmGotoForm(MainForm);
AppEventLoop();
AppStop();
break;
default:
break;
}
return errNone;
}
/***********************************************************************
*
* FUNCTION: PilotMain
*
* DESCRIPTION: This is the main entry point for the application.
*
* PARAMETERS: cmd - word value specifying the launch code.
* cmdPB - pointer to a structure that is associated with the
launch code.
* launchFlags - word value providing extra information about
the launch.
* RETURNED: Result of launch
*
* REVISION HISTORY:
*
*
***********************************************************************/
UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
return StarterPalmMain(cmd, cmdPBP, launchFlags);
}
--
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/