삽질하는플머

KOL.PAS의 SHCreateMenuBar 호출부 수정

Lazarus/KOL-CE

윈도 CE는 종류도 참 많다. 델마당에 올렸던 글에 신성기님이 달아두신 답변을 옮겨본다.

신성기 (barmi)
Windows Mobile(WM)에 비해 Windows CE (WinCE)는 포괄적인 개념입니다. WM5는 WinCE5.0기반으로 구동되는 서브셋입니다. 즉, WinCE는 MS Platform builder로 만들어지는 Embedded OS의 총칭이고, Wimdows Mobile은 이전의 Palm sized PC -> Pocket PC의 차세대 명칭으로 WinCE 기반으로 쉘,기능의 guide line을 만들어 둔 것입니다.
WinCE와 WM의 버전을 비교해 보면 다음과 같습니다.
WinCE 2.1 - Palm Sized PC (Hand Held PC)
WinCE 3.0 - PocketPC 2000/2002/2003/2003SE
WinCE 4.2
WinCE 5.0 - Windows Mobile 5
WinCE 5.2 - Windows Mobile 6
WinCE 6.0 - Windows Mobile 7
실제 Pocket PC는 모두 WinCE 3.0기반으로 만들어 진 것이라, OS의 기본 성능은 동일하고 포함되는 shell이나 dll에 따라 버전이 구분됩니다.
참고하세요.


문제는, KOL로 빌드한 실행파일의 경우 친구놈의 아이나비 플러스에서 에러가 나는 현상이 발생한다는 것. KOL은 폼을 생성하면서 SIP부분을 구현하기 위해 SHCreateMenuBar 를 호출하는데, 아이나비 플러스의 aygshell.dll 에는 이 함수가 없기 때문이다. 또 다른 글에 휘오른님이 달아두신 댓글에서 보이듯 동일한 현상이 포켓피시 2003에서도 발생한다고 하는데,

휘오른 (leekg999)
저번에 라자루스로 wince용으로 만든 다음, 파일크기를 보니 기본이 1M 더군요. 그러려니 하고, 좀 지난 pda(h4150,ppc2003)에 올려서 실행했더니,겨우겨우 로딩한뒤에, 다운먹더군요.KOL-CE 는  실행순간 넉다운..;; 제가 라자루스를 컴퓨터 3대에 깔아서 해봤는데, 윈도우 환경을 너무 타는 것 같습니다. 어떤때는 컴파일 되고, 어떤때는 IDE에서 오류나고,크로스 컴파일을 지원한다는게 매력적인 환경이지만, 초보에겐 삽질이 힘들더라구요 ㅠ_ㅠ
(혹시 WM5 이상 기종에서 성능은 어느정도 나오는지 아시는 분 계시나요?)  


포켓PC 2003에 SIP 영역이 없다는 것을 고려하면 같은 이유라고 짐작된다. (시간 날 때, 책상위에서 잠자고 있는 poz에 밥을 먹인 뒤 테스트 해 봐야 겠다.)

아무튼 이 문제를 해결하려면 KOL.PAS의 TControl.CreateWindow 함수를 손 봐 주어야 한다. 버전 2.80.1 에서는 33,837 번 라인, 버전 2.80.2 에서는 33,845 번 라인을 아래와 같이 수정하자.

2009.1.28 추가.
2009년 1월 23일에 릴리즈 된 2.80.3 버전에서는 33,847 에 해당 코드가 있다. 이거 매번 귀찮으니... 패치를 만들어 보내야 할 듯...


 // if CePlatform <> cpSmartphone then begin
 // -->> 위 코드를 다음과 같이 수정한다. 
 if CePlatform = cpPocketPC then begin


CePlatform 이 단순히 cpPocketPC인 것으로 봐서... 아무래도 2003에서는 또 다른 삽질이 필요할 듯...
이 문서는 삽질이 끝난 뒤 다시 업데이트 하도록 하자.


-->> PocketPC 2003 에뮬레이터에서 굴려본 결과는, 위의 경우와 관계없이 제대로 동작한다. 
CePlatform 값 자체도 cpPocketPC로 인식되므로 사실 저 코드와 별 차이가 없어보인다...

쩝... 결국 POZ를 충전해야 한다는 건가...


델마당의 휘오른님의 댓글에 의하면, 저 코드를 적용했을 때 h4150, PPC2003 에서 정상동작 한다고 한다. 따라서 POZ 밥먹이기는 귀차니즘에 의해 잠정중단~~ ^^;