M8下的WTL(Windows Template Library)开发

-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的工程目录
M8下的WTL(Windows Template Library)开发_第1张图片

8.好了,可以新建工程了
M8下的WTL(Windows Template Library)开发_第2张图片

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.好了,可以了:)

你可能感兴趣的:(M8下的WTL(Windows Template Library)开发)