Domanda

Ho un file .mbm che copio sul mio dispositivo usando questa riga nel file .pkg

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

Quindi nella funzione di disegno del mio contenitore lo faccio ..

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

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

Tuttavia la riga iBitmap- > Load (KMBMFile, 0); genera un KERN-EXEC: 0 PANIC

" Questo panico viene sollevato quando il kernel non riesce a trovare un oggetto nell'indice oggetto per il processo corrente o il thread corrente utilizzando il numero indice oggetto specificato (il numero di handle non elaborato). "

Qualcuno può individuare dove sto sbagliando?

Grazie!

È stato utile?

Soluzione

Stavi dereferenziando un puntatore non inizializzato, puoi anche usare questo:

// 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 );

Altri suggerimenti

Ho risolto questo problema, quindi pubblicherò la risposta qui per gli utenti futuri ..

Crea un file MBM nel tuo file MMP usando uno snippet come questo

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

assicurati che le tue immagini .bmp vengano salvate a 32 bit da Photoshop o simili

Quindi assicurati che il tuo file MBM sia copiato sul tuo dispositivo nel tuo file PKG

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

Quindi nella funzione draw del tuo contenitore usa un codice come questo ..

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

Questo disegnerà la tua bitmap nel punto in alto a sinistra dello schermo (utile per l'immagine di sfondo)

Il codice

CCoeControl :: Draw () non dovrebbe fallire e certamente non dovrebbe andarsene (non ha tracce finali. L ). Nello snippet di codice sopra ci sono due chiamate potenzialmente generatrici di errori: il costruttore iBitmap e il iBitmap- > Load () . La bitmap dovrebbe essere pre-allocata, non allocata in Draw () - se c'è un congedo accadranno cose brutte.

Inoltre, per convenzione, solo le variabili dei membri della classe iniziano con 'i', mentre iBitmap non lo è.

Vedi Standard di codifica Symbian per maggiori dettagli

Non dovresti assolutamente creare iBitmap nella funzione :: Draw perché potrebbe uscire. Meglio farlo nel ConstructL di CoeControl. Teoricamente la chiamata :: Load potrebbe essere gestita in :: Draw poiché potrebbe fallire per una serie di ragioni, non tutte fatali. Potresti farlo altrettanto facilmente quando crei il Controllo, quindi forse è meglio pensarci un po '. Direi che se il controllo è praticamente solo lì per contenere la bitmap, allora dovresti farlo in ConstructL. Se ci sono un certo numero di cose che fa il controllo, allora potresti volerlo gestire in :: Draw.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top