-1、參考文章:
1、Windows Mobile和Wince(Windows Embedded CE)下的WTL(Windows Template Library)開發http://www.cnblogs.com/procoder/archive/2009/06/03/1495002.html
2、WTL8.1 CE部分在VS2008下安裝
http://hi.baidu.com/l1_jun/blog/item/2fd61f0009d37608738da5c1.html
0、前言
M8作為一個WinCE系統,要使用WTL,按照上面的兩篇文章的說明進行配置就可以了,但為了備忘,我還是稍微記錄下。
其實在M8上用WTL來開發的並沒有太大的必要,因為M8有自己的介面SDK,同時還有.net支援,我之所以想做這樣的嘗試完全是出於興趣和學習的目的:)
就是想把自己最經常用的WTL在M8上跑一跑
1、我的機器環境:Win7 vs2008
2、下載安裝:
WTL project的地址: http://sourceforge.net/projects/wtl/
WTL8.1 : http://sourceforge.net/project/showfiles.php?group_id=109071
下載完以後解壓,例如我解壓到D:/WTL81下面。
3.開啟AppWizCE
目錄下的Files/HTML/1033/AppType.htm, default.htm, Platforms.htm,
UIFeatures.htm, 找到classid="CLSID:D245F352-3F45-4516-B1E6-04608DA126CC",修改成 classid="CLSID:5AFCAD52-F3CC-43BB-A605-6602EE5BD94A"
4.開啟AppWizCE
目錄下的Files/Scripts/1033/default.js,找到new ActiveXObject("ProjWiz.SDProjWiz2.2");改成new ActiveXObject("ProjWiz.SDProjWiz2.3");
5.開啟AppWizCE
目錄下的Files/Templates/1033/stdafx.h,找到#include <atlapp.h>,在這句話之前加上
#if _ATL_VER == 0x900
#define _SECURE_ATL 1
#endif
6.下面就可以開始安裝
了,運行AppWizCE目錄下的setup90.js,注意由於是.js檔案因此很多人可能雙擊運行後就會使用相應的軟體來開啟 了,比如記事本或者各種網頁編輯器等,這種情況下我們可以在命令列使用wscript setup90.js命令來運行,如果還是不行,那麼請修改註冊表,開啟HKEY_CLASSES_ROOT/.js 將預設值改成JSFile,這樣雙擊.js就可以運行安裝程式了,安裝完畢會出現對話方塊提示安裝成功.
7.配置VS的工程目錄
8.好了,可以建立工程了
9。竟然還有編譯錯誤,這麼修改:
1>D:/WTL81/include/atlapp.h(154) : error C2084: 函數“HRESULT ATL::CComModule::RegisterClassObjects(DWORD,DWORD) throw()”已有主體
1> D:/Program Files/Microsoft Visual Studio 9.0/VC/ce/atlmfc/include/atlbase.h(4471) : 參見“RegisterClassObjects”的前一個定義
1>D:/WTL81/include/atlapp.h(156) : error C2084: 函數“HRESULT ATL::CComModule::RevokeClassObjects(void) throw()”已有主體
1> D:/Program Files/Microsoft Visual Studio 9.0/VC/ce/atlmfc/include/atlbase.h(4472) : 參見“RevokeClassObjects”的前一個定義
在atlapp.h中找到下面的代碼,並用預定義宏包含起來
#ifndef _WIN32_WCE // Fix by linyehui 2010/5/5 11:15:13
namespace ATL
{
inline HRESULT CComModule::RegisterClassObjects(DWORD /*dwClsContext*/, DWORD /*dwFlags*/) throw()
{ return E_NOTIMPL; }
inline HRESULT CComModule::RevokeClassObjects() throw()
{ return E_NOTIMPL; }
}; // namespace ATL
#endif
10.好了,可以了:)