Frage

Ich habe eine .mbm Datei, die ich auf mein Gerät mit dieser Zeile in der PKG-Datei zu kopieren

"$(EPOCROOT)epoc32\data\z\resource\apps\MyApp.mbm" -"!:\resource\apps\MyApp.mbm"

Dann in der Zeichenfunktion meines Container Ich tue dies ..

_LIT(KMBMFile , "\\resource\\apps\\MyApp.mbm" );
CFbsBitmap* iBitmap;

iBitmap->Load(KMBMFile, 0);
gc.BitBlt(Rect().iTl, iBitmap);

Doch die Linie iBitmap->Load(KMBMFile, 0); wirft ein KERN-EXEC: 0 PANIC

„Diese Panik ausgelöst wird, wenn der Kernel nicht ein Objekt im Objektindex für den aktuellen Prozess oder aktuellen Thread mit der angegebenen Objekt Indexnummer (die rohe Handle-Nummer) finden kann.“

Kann mir jemand vor Ort, wo ich falsch gehe?

Danke!

War es hilfreich?

Lösung

Sie wurden dereferencing einen nicht initialisierten Zeiger, könnten Sie auch diese verwenden:

// remember to include the EIK environemnt include file
#include <eikenv.h>

_LIT(KMBMFile , "\\resource\\apps\\MyApp.mbm" );
CFbsBitmap* iBitmap;

iBitmap = iEikonEnv->CreateBitmapL( KMBMFile, 0 );
gc.BitBlt( Rect().iTl, iBitmap );

Andere Tipps

ich dieses Problem gelöst haben, werden so Antwort hier für zukünftige lookers posten ..

Eine MBM-Datei in Ihrer MMP-Datei wie folgt einen Ausschnitt mit

START BITMAP    MyApp.mbm
HEADER
TARGETPATH      \resource\apps
SOURCEPATH      ..\gfx
SOURCE          c24 background.bmp
END

sicherzustellen, dass Ihre .bmp Bilder in 32 Bit von Photoshop gespeichert oder ähnlich

Dann sicher, dass Ihre MBM-Datei auf Ihr Gerät in der PKG-Datei kopiert wird,

"$(EPOCROOT)epoc32\data\z\resource\apps\MyApp.mbm" -"!:\resource\apps\MyApp.mbm"

Dann in der Zeichenfunktion des Containers verwenden Sie Code wie dies ..

_LIT(KMBMFile , "C:\\RESOURCE\\APPS\\MyApp.mbm" );
CFbsBitmap* iBitmap = new (ELeave) CFbsBitmap;
TInt retval = iBitmap->Load(KMBMFile, 0);
gc.BitBlt(Rect().iTl, iBitmap);

Dies wird Ihre Bitmap in dem oberen linken Punkt des Bildschirms (nützlich für Hintergrundbild)

zeichnen

CCoeControl::Draw() Code sollte nicht fehlschlagen, und soll auf jeden Fall nicht verlassen (es keine Hinter ..L hat). Im Codeausschnitt oben gibt es zwei potentiell fehler Erzeugung Anrufe - iBitmap Konstruktor und iBitmap->Load(). Die Bitmap sollte vorbelegt, nicht in Draw() zugeordnet werden. - wenn es ein Abschied schlechte Dinge passieren werden,

Auch durch die Konvention nur Klasse Membervariablen beginnen mit ‚i‘, der über iBitmap nicht.

Siehe Symbian Coding Standards für mehr Details

Sie sollten auf jeden Fall nicht schaffen iBitmap in der Funktion :: Draw wie es verlassen kann. Beste, was in der ConstructL des CoeControl zu tun. Theoretisch könnte der :: Load Anruf in :: Draw behandelt werden, wie es für eine Reihe von Gründen fehlschlagen könnte, von denen nicht alle tödlich sein kann. Sie könnte genauso gut tun, wenn die Steuerung zu schaffen, obwohl, so ist es vielleicht am besten über sie ein wenig zu denken. Ich würde sagen, dass, wenn die Steuerung im Grunde nur dort die Bitmap enthalten, dann sollten Sie es in der ConstructL tun. Wenn es eine Reihe von Dingen, die die Steuerung der Fall ist, dann sollten Sie es zu handhaben in :: Draw.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top