Question

J'ai un fichier .mbm que je copie sur mon appareil en utilisant cette ligne dans le fichier .pkg

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

Ensuite, dans la fonction draw de mon conteneur, je le fais ..

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

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

Toutefois, la ligne iBitmap- > Load (KMBMFile, 0); génère une PANIQUE KERN-EXEC: 0

.

"Cette panique est déclenchée lorsque le noyau ne peut pas trouver d'objet dans l'index d'objet pour le processus ou le thread en cours à l'aide du numéro d'index d'objet spécifié (le numéro de descripteur brut)."

Quelqu'un peut-il voir où je me trompe?

Merci!

Était-ce utile?

La solution

Vous avez déréférencé un pointeur non initialisé, vous pouvez également utiliser ceci:

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

Autres conseils

J'ai résolu ce problème, je vais donc répondre ici pour les futurs visiteurs.

Créez un fichier MBM dans votre fichier MMP en utilisant un extrait de code comme celui-ci

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

assurez-vous que vos images .bmp sont enregistrées au format 32 bits à partir de photoshop ou similaire

Assurez-vous que votre fichier MBM est copié sur votre appareil dans votre fichier PKG

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

Ensuite, dans la fonction draw de votre conteneur, utilisez un code tel que celui-ci.

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

Ceci dessine votre bitmap en haut à gauche de l'écran (utile pour l'image d'arrière-plan)

CCoeControl :: Draw () le code ne devrait pas échouer, et ne devrait certainement pas quitter (il n'a pas de fin .. L ). L'extrait de code ci-dessus contient deux appels potentiellement générateurs d'erreurs - le constructeur iBitmap et le code iBitmap- > Load () . Le bitmap doit être pré-alloué, et non alloué dans Draw () - s'il y a un congé, de mauvaises choses vont arriver.

De plus, par convention, seules les variables de membre de classe commençant par 'i', ce que iBitmap ci-dessus n'est pas.

Voir Normes de codage Symbian pour plus de détails

Vous ne devez absolument pas créer iBitmap dans la fonction :: Draw car elle pourrait partir. Le mieux est de le faire dans le ConstructL du CoeControl. Théoriquement, l'appel :: Load pourrait être traité dans :: Draw car il pourrait échouer pour un certain nombre de raisons, qui ne sont pas toutes fatales. Vous pouvez tout aussi facilement le faire lors de la création du contrôle, alors il vaut peut-être mieux y penser un peu. Je dirais que si le contrôle est fondamentalement juste là pour contenir le bitmap, vous devriez le faire dans le ConstructL. Si le contrôle fait un certain nombre de choses, vous pouvez vouloir le gérer dans :: Draw.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top