hallo an alle,
nun versuche ich mich in palm programmierung
und scheitere schon beim ersten programm.
diese programm habe ich einwenig abgeaendert
und ist dem buch "palm-programmierung mit dem gcc" entnommen (s. 54 und 55).
lediglich habe ich meine namen fuer die funktionen gewaehlt.
also haben meine dateien folgende eintraege:
kartei.c
[PHP]
#include <PalmOS.h>
#include "kartei.h"
//-----------------
// Hilfsfunktionen
//-----------------
// Start Funktion des Kartei Programm
void StartApplication(void) {
FrmGotoForm(KarteiStartFormular);
} // Ende der Funktion StartApplication
// Stop Funktion des Kartei Programm
void StopApplication(void) {
FrmCloseAllForms();
} // Ende der Funktion StopApplication
// Funktion zum Abfragen der Formularevents von KarteiStartFormular
Boolean KarteiStartFrmHandleEvent(EventPtr event) {
FormPtr formular;
Boolean handled = false;
switch (event->eType) {
case frmOpenEvent:
// Referenz des Formulars ermitteln
formular = FrmGetActiveForm();
// Zeichen des Formulars
FrmDrawForm(formular);
// Text in das gezeichnete Formular schreiben
WinDrawChars("Kartei!",7 ,80,80);
handled = true;
break;
} // Ende der switch-Anweisung
return handled;
} // Ende der Funktion KarteiStartFrmHandleEvent
// Funktion zum Abfragen der Applicationevents
Boolean ApplicationHandleEvent(EventPtr event) {
FormPtr formular;
int formularId;
Boolean handled = false;
if (event->eType == frmLoadEvent) {
// Bestimmen der Formular ID
formularId = event->data.frmLoad.formID;
formular = FrmInitForm(formularId);
// Formular aktiv setzten
FrmSetActiveForm(formular);
switch(formularId) {
case KarteiStartFormular:
FrmSetEventHandler(formular, KarteiStartFrmHandleEvent);
break;
} // Ende der switch-Anweisung
handled = true;
} // Ende der if-Abfrage, der Zeiger von eType gleich frmLoadEvent
return handled;
} // Ende der Funktion ApplicationHandleEvent
//---------------
// Hauptprogramm
//---------------
UInt32 PilotMain(UInt16 cmd, void *cmdPBP, UInt16 launchFlags) {
EventType event;
if (cmd == sysAppLaunchCmdNormalLaunch) {
// Starten der StartApplication Funktion
StartApplication();
do {
EvtGetEvent(&event, evtWaitForever);
if (!SysHandleEvent(&event)) {
if (!ApplicationHandleEvent(&event)) {
FrmDispatchEvent(&event);
} // Ende der if-Abfrage ob ApplicationHandleEvent ungleich event
} // Ende der if-Abfrage ob SysHandleEvent ungleich event
} while (event.eType != appStopEvent); // Ende der do-while Schleife
// Starten der StopApplication Funktion
StopApplication();
} // Ende der if-Abfrage
return 0;
} // Ende der PilotMain Funktion
[/PHP]
kartei.h
[PHP]
#define KarteiStartFormular 1000
[/PHP]
kartei.res
[PHP]
#include "kartei.h"
FORM ID KarteiStartFormular AT (0 0 160 160)
BEGIN
TITLE "Kartei"
END
[/PHP]
das kompilieren funktioniert ohne probleme.
auch das resourcefile kompilieren geht ohne fehler,
sowie das prc bauen.
/usr/bin/m68k-palmos-gcc -g -O3 -o kartei kartei.c
m68k-palmos-obj-res kartei
build-prc kartei.prc "Kartei" KTEI *.kartei.grc
nun installiere ich mein programm in pose (version 3.5/linux) mit dem rom PalmOS412_FullRel_EZ_enUS.rom.
auch ok.
nun starte ich mein programm kartei.prc
und bekomme folgende meldung:
Kartei (unknown version) called SysFatalAlert with the
message: "MemoryMgr.c, Line:4365, NULL handle".
nun druecke ich auf continue und bekomme diese fehlermeldung:
Kartei (unknown version) called SysFatalAlert with the
message: "MemoryMgr.c, Line:4450, Nil Ptr".
ein weiteres continue ermittelt folgende fehlermeldung:
Kartei (unknown version) just read from memory location
0xFFFFFFFC, which is in the storage heap. In order to
protect the integrity of the user's data, such direct access
is not allowed. Instead, applications should use special
Palm OS functions for this purpose.
der button debug laesst sich nicht betaetigen
und der pose muss resetet werden.
nun habe ich es auch schon mit dem debugger versucht:
und bekomme nach dem ich das programm kartei.prc auf meinem pose gestartet habe folgende meldungen:
dann gebe ich continue ein und bekomme diese meldung:
Kartei (unknown version) called SysFatalAlert with the
message: "MemoryMgr.c, Line:4365, NULL handle".
also wie oben.
nun kann ich aber den button debug druecken
und bekomme eine neue fehlermeldung:
das sagt mir aber alles wenig.
das programm habe ich mehrfach abgeglichen
und es immer als fehlerfrei empfunden,
pose aber nicht.
hat jemand eine idee?