문제

.pkg 파일 에서이 줄을 사용하여 장치에 복사하는 .mbm 파일이 있습니다.

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

그런 다음 컨테이너의 드로우 함수에서 나는 이것을한다 ..

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

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

그러나 라인 iBitmap->Load(KMBMFile, 0); Kern-Exec : 0 Panic을 올립니다

"이 공황은 커널이 지정된 객체 색인 번호 (원시 핸들 번호)를 사용하여 현재 프로세스 또는 현재 스레드의 객체 인덱스에서 객체를 찾을 수 없을 때 발생합니다."

내가 어디에서 잘못 될 곳을 찾을 수 있습니까?

감사!

도움이 되었습니까?

해결책

당신은 초기화되지 않은 포인터를 해석하고 있었고, 이것을 사용할 수도 있습니다.

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

다른 팁

이 문제를 해결 했으므로 미래의 외관을위한 답변을 게시 할 것입니다 ..

이와 같은 스 니펫을 사용하여 MMP 파일에서 MBM 파일을 만듭니다.

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

.BMP 이미지가 Photoshop 또는 이와 유사하게 32 비트로 저장되었는지 확인하십시오.

그런 다음 MBM 파일이 PKG 파일의 장치에 복사되어 있는지 확인하십시오.

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

그런 다음 이와 같은 컨테이너 사용 코드의 드로우 기능에서 ..

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

이것은 화면의 왼쪽 상단에 비트 맵을 그립니다 (배경 이미지에 유용함).

CCoeControl::Draw() 코드는 실패해서는 안되며 확실히 떠나지 않아야합니다 (후행이 없습니다 ..L). 위의 코드 스 니펫에는 잠재적으로 오류가 발생하는 두 가지 호출이 있습니다. iBitmap 생성자 및 iBitmap->Load(). 비트 맵은 할당되지 않고 사전 배치해야합니다 Draw() - 휴가가 있으면 나쁜 일이 일어날 것입니다.

또한 컨벤션 별 클래스 멤버 변수는 'I'로 시작합니다. iBitmap 위의 것은 아닙니다.

보다 심비안 코딩 표준 자세한 사항은

다음 :: Draw 함수에서 IBITMAP를 생성해서는 안됩니다. Coecontrol의 구성에서 그렇게하는 것이 가장 좋습니다. 이론적으로 :: 부하 호출은 여러 가지 이유로 실패 할 수 있으므로 모든 것이 치명적일 수있는 것은 아닙니다. 컨트롤을 만들 때 쉽게이 작업을 수행 할 수 있으므로 조금 생각하는 것이 가장 좋습니다. 컨트롤이 기본적으로 비트 맵을 포함하기 위해 컨트롤이 있다면 구성 요소에서 수행해야한다고 말합니다. 컨트롤이하는 많은 일이 있다면 :: Draw에서 처리하고 싶을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top