WinCE 용 ActiveX Launcher 만들기..!!
VS2005로 PDA 에서 구동 가능한 ActiveX Launcher 만들기
안녕하세요 조갑열입니다
제가 ActiveX 런쳐를 만들면서 약간 고생(?)을 해서 잊어버리지 않기 위해 강좌형태로 만들어 봤습니다
허접하다고 돌 던지지 마세요…상처 받습니다..( ㅜ_ㅜ
환경은 다음과 같습니다
<개발환경>
Microsoft Visual Studio 2005
Install Shield9
<구동환경>
Microsoft Windows CE.Net 4.2 Pocket PC
PDA용 Active X는 PC에서처럼 Web에서 다운로드 후 인스톨이 안됩니다
Embedded Visual C++4.0 설치 후 튀어나오는 Readme를 읽어보시면 해당 내용이 있습니다
(솔직히 어디있었는지는 기억이 안납니다... 거기 있던거 같은데, 정확히 아시는분은 댓글 주세요..^^)
PDA Local에서 인스톨이 되어야 하며, html 페이지에서 호출해서 사용하는 방법을 취합니다.
사설이 길었습니다 프로젝트를 만들어볼까요..^^)?
1. VS2005 로 Mobile 단말기 프로젝트를 생성한다
스마트장치 -> MFC 스마트장치 ActiveX 컨트롤 -> Project명을 입력한 후 “확인”
2. 플렛폼 선택
Pocket PC2003 SDK밖에 안깔려있어서..-_-)
다른건 기본옵션으로 두고 “마침”클릭합니다
3. Method 추가
클레스뷰 -> 프로젝트명Lib 확장 -> 마우스 우클릭 -> 추가 -> Method
Method 추가 마법사가 실행됩니다
4. Method 세부속성 추가
반환형식 : void
메서드 이름 : ExecPgr
매개변수 형식 : VARIANT
매개변수 이름 : varParam1
이라고 넣겠습니다. 다음> 하면 IDL 특성창이 튀어나옵니다 Default로 놓고 “마침”
추가한 Method 가 보입니다..^^;
5. Method 편집
ActiveX Ctrl 클레스를 확장해보면 우리가 추가한 Method 명과 동일한 Method 가 보입니다
요놈을 편집해보겠습니다
CString strParameter = L"";
strParameter.Format(L"/%s",varParam1.bstrVal);
CString szCmdLine = L"\\windows\\SomeExe.exe";
SHELLEXECUTEINFO shExIf={0};
shExIf.cbSize = sizeof( SHELLEXECUTEINFO );
shExIf.lpVerb = L"open";
shExIf.lpFile = szCmdLine;
shExIf.nShow = SW_SHOW;
shExIf.lpParameters = strParameter;
shExIf.fMask = SEE_MASK_NOCLOSEPROCESS;
DWORD ret;
ret = ShellExecuteEx( &shExIf );
다음과 같은 코드를 추가한다.
뭐 코드는 굳이 설명드리지 않아도 다 아실거라고 생각하며 다음으로 넘어가겠다.
다음으로 해주어야 하는일은 IsInvokeAllowed 메서드를 맵핑해주는 일이다
이건 뎁피아 모바일 게시판에서 안경환(jguruman),
저도 몰랐거든요..^^;;
6. IsInvokeAllowed 메소드 추가
BOOL CTestActivexCtrl::IsInvokeAllowed(DISPID /*dispid*/)
{
return TRUE;
}
위 코드이외에 추가해준 것은 없다..ㅎㅎㅎ
이제 빌드를 해보자... 잘 따라왔다면은 별다른 에러 없이 빌드후 단말기가 연결되어있다면 다운로드가 될것이다. (적어도 이정도는 알고 계시리라 생각하고 생략한다)
7. Test HTML Page작성
이제 우리가 만든 ActiveX컨트롤을 테스트해보기 위한 HTML Page를 작성해보자
필자는 WinXP Professional SP2 버전을 사용하고 있다. 서버까지 설치하기 귀찮으니 그냥 로컬에 IIS설치하고 테스트하자.
HTML 페이지는 다음과 같이 작성하자
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<SCRIPT language="javascript">
function ExecPgr()
{
alert("AX Load OK!!!");
AX_PDA.ExecPgr(“ActiveX Parameter”);
}
</SCRIPT>
<HTML>
<HEAD>
<TITLE>ActiveX Sample</TITLE>
</HEAD>
<BODY>
<OBJECT id="AX_PDA" classid="clsid:97A7ECC6-054B-463C-9DF4-10AE37513022"
width=0 height=0 align=center hspace=0 vspace=0 border="0">
</OBJECT>
<br><br>
<hr>
<input type=button name="test" value="Click here" onclick="javascript:ExecPgr()" />
</BODY>
</HTML>
그냥 긁어다가 가져다써도 무방하다..
단 <OBJECT 테그 안에 있는 clsid 를 현재 우리가 작성한 clsid로 변경해줘야 한다
clsid 는 우리가 작성한 프로젝트의 *.idl 파일 안에 있다
7.테스트
PDA를 연결해놓은 뒤 Build -> Deploy 를 하면 우리가 만든 ocx는 자동으로 단말기에 다운로드 & 등록 된다
하지만 Install Shield 를 사용하는 경우에는 regsvrce.exe 를 이용하여 수동으로 등록해주어야 한다
regsvrce.exe파일을 가지고 있지 않다면 EVT3.0 을 설치해야 한다..-_-);
위에서 만든 html파일을 c:\inetpub\wwwroot 에 복사해놓는 것은 기본이겠지??
PDA를 PC와 ActiveSync로 연결해놓은 뒤 PDA에서 PC IPADDRESS 가 192.168.10.5 라고 가정한 경우
Pocket PC IE 주소창에 http://192.168.10.5/AX_TEST.html 이라고 입력한후 엔터키를 치면
보안 어쩌고 하는 창이 하나 뜬다
(미친병아리 홈페이지를 방문하시면 ISafeObject 이던가 이 메소드를 구현해주는 방법이 있다. 이 메소드를 구현하면 보안경고창은 없어질지 모르겠다..-_- 해봐야지 해봐야지 하면서도 귀차니즘의 압박이 심하다..-_-)
YES치고 들어가면 버튼하나 달랑있는 HTML페이지가 로드될것이고 Button을 누르면 우리가 ExecPgr 메서드에서 등록해놓은 프로그램이 WebPage에서 전해주는 프로그램 실행 인수와 함께 구동될것이다
허접한 강좌지만 PDA용 Web Ctrl을 만드시는데 도움이 되셨으면 합니다..^^;
이번에 ActiveX를 하나 만들일이 있었는데 요놈만들면서 별거아닌거에 시간이 좀 많이 투자되어서 말이죠.
저와 같은 고민을 하시는분들께 도움이 되셨으면 합니다..^^;