X(종료?) 버튼을 누르면 발생하는 메시지는 무엇인가요?
에 대한 답글로 적어 놓은건데...
Windows Mobile와 Windows CE에 대한 차이를 설명해 놓았다.
답변후 EVC의 플랫폼 선택에 대한 질문이 있어 댓글을 남겼다.
설명에 AYGSHELL에 대한 설명이 있다.
Windows CE와Windows Mobile을 하다보면 AYGSHELL이 나오는데,
Windows CE에서는 Application 개발시 AYGSHELL이란 것의 정체를 알아야 나중에 뒤통수를 안맞는다.
(그거 잘못 썼다간 OS라이센스비용으로 인해 제품 생산도 못하고 다시 개발 해야 하는 상황이 올 수 있다.
울고싶지 않으면 AYGSHELL을 알아야 한다.)
에 대한 답글로 적어 놓은건데...
Windows Mobile와 Windows CE에 대한 차이를 설명해 놓았다.
안녕하세요.. 버들피리님이 말씀하신대로 많은 사람이 고민한 흔적이 역력하고 저또한 고민을 했었습니다. 왜 종료를 안시키고 놔두는거지... 하면서 나름대로 고민한 결과, 아래와 같습니다. 해결 하신듯 한데 참고...될려나요??
아시다 시피 PocketPC는 Windows CE와 쉘이 약간 다른데요.. Pocket PC쉘을 뭐라 부르는지는 모르겠고 Windows CE와 Windows는 explorer가 쉘이 됩니다.Pocket PC프로그램을 한번도 안해 봐서 맞는지는 모르겠지만 아는데로 써보겠습니다. 먼저 Pocket PC와 Windows CE는 쉘에서 메모리를 관리하는 방법이 다릅니다. Pocket PC에서는 동일한 프로그램이 중복되어 실행되게 하지 않는다는 전제를 걸고 각 시스템 전체 메모리를 관리 합니다. 반면에 Windows CE는 시스템 메모리를 사용자가 관리 하도록 합니다. 자세히 말하면... Pocket PC에서는 사용자 종료 라는게 없고 종료는 쉘에서 합니다. Pocket PC에서 x버튼은 해당 프로그램을 백그라운드로 보내버리는 역활을 합니다. 프로그램은 여전히 메모리에 상주 되어 있는 상태지요. 이렇게 백그라운드로 보내진 프로세스는 나중에 메모리가 부족할때 쉘에서 가장 오랫동안 사용 안한 프로세스를 골라 삭제하고 그래도 모자라면 스택이나 가상메모리를 관리 합니다. 그래도 모자라면 쉘만 남기고 프로그램을 종료하는 그런 방식 입니다. Pocket PC에서 프로그램을 실행하면 빠르게 실행되는 이유도 여기에 있습니다. (메모리에 상주되어 있기 때문에...) /* 잠깐만 옆길로 새서.... 어떤면에서는 애플의 OSX에서도 비슷한 메모리 관리가 사용되는데요... OSX에서 한번 실행된 프로그램은 다음에 실행할때 무지 빠르게 실행 됩니다. 다른점은 OSX에서는 완전종료를 해도 그렇다는것이지요... OSX의 메모리 관리는 독특하고 효율적이더군요. */ Windows CE에서는 쉘이 explorer이래서 그런지 Windows의 쉘처럼 동작 합니다. 프로그램 실행 시키면 메모리 할당하고 할당 못하면 메모리 부족하다고 메세지 나오고 프로그램 종료하고... 관리 되는게 Windows와 크게 다르지 않더군요. 그럼 어떻게 해야 Pocket PC에서 프로그램을 완전 종료 시킬수 있나.... WINDOWCLASS가 어떤지에 따라 약간 달라질수도 있는데....일반적으로 코딩할때에는 다음처럼 하면 됩니다. X버튼이라 함은 메뉴컨트롤을 생성 했을때 일것으로 추측 됩니다. X를 누르면 먼저 WM_COMMAND메세지를 받습니다. 그리고 WM_COMMAND에서 ID가 X의 값이면 WM_CLOSE나 WM_DESTROY등 적절히 호출 하시면 됩니다. /* 음...질문 나온김에... 윈도우 생성시 WINDOWCLASS의 윈도우 스타일 속성에 따라 "View" 또는 "Dialog", "System"등...이렇게 불립니다. 이들의 차이는 그냥 윈도우 스타일이 다르다는건데요.. 윈도우 타이틀 바에 'X'표시만 있냐, 최소화 버튼도 있냐.. 윈도우에 스크롤바가 지원되냐 아니냐등...윈도우 스타일에 따른 이름일뿐 별다른거는 없습니다. "타이틀바 얇고 X버튼 작고 스크롤바 지원 안되는 윈도우"라고 부르기 힘드니까 드냥 "시스템속성 스타일 윈도우"라고 부르는 정도 입니다. WINDOWCLASS의 dwWindowStyle인가?? 암튼 그 비슷한 구조체 필드를 보시면 다양한 스탸일의 윈도우가 가능한것을 보실수 있습니다. */ 결론은, 1. Pocket PC에서는 종료를 쉘이 관리 하니까 원래 그게 표준이다. 2. Pocket PC에서는 프로그램을 다중실행 하면 안된다.(쉘에서 메모리 관리할때 짜증낸다..) 3. Windows CE처럼 하고 싶다면 액션을 취하는 부분에서 WM_CLOSE나 WM_DESTROY를 해주다. 이상 입니다.
참견: 아무리 잘 만든다고 해도 프로그램이 모든것을 고려 할 수는 없기에 외부 요건을 고려 해야 합니다. 예를들어 우리가 X버튼을 눌렀을때 종료가 아니래서 불편하기에 X버튼을 종료로 돌려 놨을경우 PDA에 익숙한 사람이나 지역 또는 나라나 연령등에 따라 X버튼이 종료버튼으로 동작할때 당황 할 수도 있을것입니다. 프로그램은 개발이 들어가기전에 누가 어떤 목적으로 사용 할지를 고려 해야겠지요. 꼭 X버튼을 없애는게 맞느건지 한번 생각해 보는것도 좋습니다 |
답변후 EVC의 플랫폼 선택에 대한 질문이 있어 댓글을 남겼다.
설명에 AYGSHELL에 대한 설명이 있다.
Windows CE와Windows Mobile을 하다보면 AYGSHELL이 나오는데,
Windows CE에서는 Application 개발시 AYGSHELL이란 것의 정체를 알아야 나중에 뒤통수를 안맞는다.
(그거 잘못 썼다간 OS라이센스비용으로 인해 제품 생산도 못하고 다시 개발 해야 하는 상황이 올 수 있다.
울고싶지 않으면 AYGSHELL을 알아야 한다.)
프로그램을 짜주게 해주는 프로그램을.... 그러니까 컴파일러와 에디터와 링커같은것들이 한꺼번에 지원되는것 말씀이시죠? 예를 들면 Visual Studio라던지, eVC라던지.. 이런거를 통상 IDE(통합환경)이라고 부르긴 합니다. 그렇지만 그냥 PB라고 하나 eVC라고 하나 VS2005라고 하나 컴파일만 잘해주고 디버깅만 잘 해주면 용어야 어떻겠습니까..^^;; 말씀하신대로 eVC나 VS(VisualStudio)의 툴바를 보면 "POCKET PC2003", "Win32[WCE ARMv4]"같은걸 선택하게 되어 있습니다. 이런것들은 해당 머신에 대한 바이너리를 생성하기 위한 플랫폼 인데요.. POCKET PC2003을 선택하면 "POCKET PC2003"플랫폼을, Win32[WCE ARMv4]을 선택하면 "Win32[WCE ARMv4]"를 지원 해줍니다. 그외에도 MIPS도 있고 다른것도 있습니다. 바이너리를 생성하는 입장에서 보면 플랫폼 이라는건 어떻게 보면 구성 요소들 인데, "POCKET PC2003"을 선택하고 컴파일 하면 "POCKET PC2003"에 대한 구성 요소들을 제공 해줍니다. 이는 POCKET PC2003에서 제공하는 함수나 환경변수등 구성 요소를 프로그램시에 사용 할 수 있다는 것이지요. "Win32[WCE ARMv4]"도 이와 같은 맥락 입니다. 이 플랫폼들은 "Windows CE Tools"라는 경로에 설치되어 있더군요. /* Windows CE Tools는 eVC, VS, PB를 설치하다 보면 여러군데 설치 됩니다. 아마도 프로그램들 마다 편한데다 설치해놓고 쓰나 봅니다. 플랫폼 메니저 라는것도 중요한건데 eVC와 VS와 버전이 다르고.. VS로 가면서 많이 통합되어 가는데 이전 버전과는 경로도 다르고...암튼 그렇습니다. 그리고 이런 플랫폼들은 자기한테 맞는 플랫폼을 PB에서 만들어서 제공 할 수도 있습니다. */ 둘다 ARM계열의 CPU를 사용 하는데 그럼 이 두개는 무엇이 다를까.... 두 플랫폼의 가장 큰 차이는 쉘에 있습니다. 간단히 말하면(사실 간단한 차이밖에 몰라요...) POCKET PC2003는 AYGSHELL의 내용이 지원되는게 기본이고, Win32[WCE ARMv4]는 AYGSHELL이 기본 사양이 아닙니다. 커널 만들때 추가해 줘야 하지요. 이거 추가하면 커널이 코어버전에서 프로페셔널 버전으로 등급 합니다. 그러면서 MS에 돈을 더 줘야 하지요. AYGSHELL은 PPC(Pocket PC)와의 호환을 위해 WinCE에서 지원하는 쉘 라이브러리라고 합니다. AYGSHELL은 기본쉘인 explorer에서 확장된 개념인데요... 그래서 WinCE에서 개발된것은 PPC에서 실행 되어도 PPC에서 개발된것은 WinCE에서 실행이 잘 안된다고 이야기 하는것도 이런 경우 입니다. PPC의 경우 WinCE의 explorer쉘을 수정하고 개조하고 확장시킨 쉘을 가지고 있다고 생각 합니다. // 쓰다보니 점점 이상한데로 빠지네요... 결론은 플랫폼 선택에서 "POCKET PC2003"을 선택하면 PPC2003용 바이너리가 만들어 지고, Win32[WCE ARMv4]를 선택하면 WinCE ArmV4용 바이너리가 만들어 집니다. 그렇지만 PPC로 컴파일해도 확장쉘에 있는 함수를 사용하지 않고 개발한 경우 WinCE에서 돌아가는데 지장 없습니다. "PPC라는 PDA의 커널이 WinCE일지라도 OS는 PPC이다"라고 말 할 수 있겠네요. /* 설명 하면 할수록 배배 꼬이네요. ^^;; 플랫폼에 대해 아무리 간단하게 설명 하려고 해도 어지럽네요. PPC가 PPC2000, PPC2002, PPC2003이렇게 있던가요? PPC2005, PPC2006이 없는게 다행 입니다. 이런 많은 플랫폼을 보면 MS가 모바일 사업에 있어서 순발력과 적응력이 강하다고 해야 할지... 갈팡질팡 한다고 해야할지.... -.-;; */ 이상 좋은하루 되세요~ |
'작업일지 > Windows CE' 카테고리의 다른 글
MSCEInf - Windows CE의 CAB파일 관리툴 (0) | 2009.12.04 |
---|---|
WinCE 개발툴 - Remote control (0) | 2009.12.04 |
RETAILMSG의 Ascii출력. (1) | 2009.08.23 |
Windows CE Application에서의 메모리 누수 검사 방법... (0) | 2009.08.22 |
윈도우 데스크탑 영역 (0) | 2009.08.22 |