Pergunta

Eu tenho um arquivo .mbm que eu copiar para o dispositivo usando esta linha no arquivo .pkg

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

Em seguida, na função de empate do meu recipiente Eu faço isso ..

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

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

No entanto, o iBitmap->Load(KMBMFile, 0); linha levanta uma KERN-EXEC: 0 PÂNICO

"Este pânico é gerado quando a semente não pode encontrar um objecto no índice de objecto para o processo actual ou de fios de corrente usando o número de índice de objecto especificada (o número identificador cru)."

Pode alguém local onde estou indo errado?

Obrigado!

Foi útil?

Solução

Você foi dereferencing um ponteiro não inicializado, você também pode usar o seguinte:

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

Outras dicas

Eu ter resolvido esse problema para postar resposta aqui para futuros espectadores ..

Crie um arquivo MBM em seu arquivo MMP usando um trecho como este

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

garantir suas imagens .bmp são salvos em 32 bits do Photoshop ou similar

Em seguida, se o seu arquivo MBM é copiado para o seu dispositivo em seu arquivo PKG

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

Em seguida, na função de empate de seu código de uso recipiente como este ..

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

Isso vai chamar a sua bitmap no ponto superior esquerdo do ecrã (útil imagem de fundo para)

código

CCoeControl::Draw() não deve falhar, e certamente não deve deixar (não tem ..L à direita). No trecho de código acima, existem duas chamadas potencialmente geradoras de erro - Construtor iBitmap e iBitmap->Load(). O bitmap deve ser pré-alocados, não atribuído em Draw() -. Se houver uma licença coisas ruins vão acontecer

Além disso, por convenção únicas variáveis ??membro da classe começar com 'i', que iBitmap acima não é.

Symbian Padrões de Codificação para mais detalhes

Você deve definitivamente não criar iBitmap na :: desenhar função como poderia sair. Melhor fazer isso na ConstructL do CoeControl. Teoricamente, o :: chamada de carga poderia ser tratado em :: Draw como pode falhar por uma série de razões, nem todos que pode ser fatal. Você poderia facilmente fazer isso ao criar o controle, porém, talvez por isso é melhor pensar um pouco sobre isso. Eu diria que se o controle é basicamente apenas para conter o bitmap então você deve fazê-lo no ConstructL. Se há uma série de coisas que o controle faz, então você pode querer lidar com isso em :: Draw.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top