Chinaunix首页 | 论坛 | 博客
  • 博客访问: 431692
  • 博文数量: 56
  • 博客积分: 2262
  • 博客等级: 大尉
  • 技术积分: 711
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-08 20:04
文章分类

全部博文(56)

文章存档

2013年(1)

2012年(9)

2011年(10)

2010年(7)

2009年(7)

2008年(22)

我的朋友

分类: 嵌入式

2012-04-14 00:18:59

B/S是 浏览器/服务器 模式,只要在服务器装好后,其他人只需要用浏览器(比如IE)就可以正常浏览
C/S是 客户端/服务端 模式,服务器装好后,其他人还需要在客户端的电脑上安装专用的客户端软件才能正常浏览操作
 
通常情况下,嵌入式环境下,需要控制或者采集硬件数据,但是B/S架构应用程序依赖于浏览器,并且不能直接访问硬件,因此,这里就需要使用ActiveX控件来实现硬件的控制等。
 
接下来,介绍一下使用VS2005开发wince下的ActiveX控件。
 
第一步:新建一个“ATL智能设备”
 
选择目标平台
 
动态链接库
 
完成后,项目文件如下,其中“生成的文件”目录下是有编译器自动生成,不能手动更改,好像是更改后也会被编译器重写。
 

 
第二步:上一步中,已经完成了一个ActiveX项目的新建,接下来就是添加具体的应用代码了。
首先选择“项目”-》添加-》类
 
 
这里选择“智能设备”-》ATL简单对象
 
这里的简称不能与项目名称相同
 
这一步非常重要,涉及到我们的IE是否能够正常调用该控件。
IObjectWithSite是对IE对象的支持。
 
找到“CEActiveXDemo.h”-》“class ATL_NO_VTABLE CCEActiveXDemo”,添加如下代码:
 
此时如果编译,会出现如下错误:
error C2504: 'IObjectSafetyImpl' : base class undefined
因此在头文件种增加:
#include
 
再次编译,出现:
error C2039: 'UpdateRegistry' : is not a member of 'CCEActiveXDemo'
see declaration of 'CCEActiveXDemo'
'UpdateRegistry' : undeclared identifier
更改CCEActiveXDemo类中如下代码
//#ifndef _CE_DCOM
DECLARE_REGISTRY_RESOURCEID(IDR_CEACTIVEXDEMO)
//#endif
这样之后,代码就可以正常编译了。
 
添加ReturnError

点击(此处)折叠或打开

  1. /************************************************************************/
  2.     /* 控件被加载时,调用此方法                                                */
  3.     /* 我们可以再此处添加初始化代码                                            */
  4.     /************************************************************************/
  5.     HRESULT FinalConstruct()
  6.     {
  7.         return S_OK;
  8.     }
  9.     /************************************************************************/
  10.     /* 控件释放时,调用此方法 */
  11.     /* 我们可以在此处添加资源释放代码 */
  12.     /************************************************************************/
  13.     void FinalRelease()
  14.     {
  15.     }
  16.     // 网上搜索了一下,都说要添加此函数,但至今未发现有何用处。
  17.     LONG ReturnError(LONG retval)
  18.     {
  19.         return 0x80FF0000 + retval;
  20.     }
 
第三步:完成以上两个步骤之后,一个ActiveX控件框架就已经完成了。
        这一步我们就可以为控件添加需要的方法和属性了。
 
选择ICEActiveXDemo,添加方法
 
作为IE控件对象,返回类型必须为HRESULT,此处也不能被更改,正好避免了出错的机会^.^
此处可以直接点击“完成”,完成方法的添加。
 
这里不需要更改,这里选项的意思希望大家不吝赐教,我还没有搞懂。我没有更改,使用默认。
 
方法添加完成后我们会注意到,在idl文件中有如下代码:

点击(此处)折叠或打开

  1. interface ICEActiveXDemo : IDispatch{
  2.     [id(1), helpstring("方法SumOf")] HRESULT SumOf([in] LONG lVal, [in] LONG lVal2, [out,retval] LONG* lRetVal);
  3. };
如果我们在方法实现代码中更改了参数,或者名称,这里也需要对应更改。
 
好了,实现我们的SumOf函数吧:

点击(此处)折叠或打开

  1. STDMETHODIMP CCEActiveXDemo::SumOf(LONG lVal, LONG lVal2, LONG* lRetVal)
  2. {
  3.     *lRetVal = lVal + lVal2;

  4.     return S_OK;
  5. }
编译完成。
 
下一章将介绍如何在wince中注册我们开发的控件。
 
 
 
阅读(3034) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~