Windows CE 系统进程外组件应用开发
前序:
Windows CE提供以下几种COM-Base的应用
1. Minimal COM提供最基础的COM开发接口(API),每个com对象的创建大概需要10~20K。
2. COM提供了普通COM和OLE自动化实现的支持,只能实现自由线程模型、进程内的COM对象。各个COM对象创建大概需要100~200K。
3. DCOM提供了COM所有功能的支持,包括远程设备COM服务。每个对象最少需要700K。
在 默认状态下,由于安全角度考虑,远程服务功能是关闭的;使得DCOM只能提供本地服务,服务进程可连接Internet。要启用远程COM服务功能需要将SYSGEN_DCOM_REMOTEACCESS置为1.
4. COM Storage将结构化存储功能加入了Mini COM、COM、DCOM的实现。
通过上面几点可知,只有DCOM才具有开发进程外组件的能力。
因此想要开发WINCE进程外的组件步骤
1.将DCOM组件加入OS中
2.导出相应的SDK
这篇文章说明了如何使用 WindowS CE 6.0 系统的 DCOM ,开发 com 服务进程。向客户端提供跨进程的 COM 组件服务,以及自定义接口代理 / 存根 dll 的建立,注册。
假定你需要创建一个实时的控制程序,需要一直在后台运行着,而你的客户端却是多个或多样性,客户端的开发语言不确定性。这就需要创建一个 COM 服务进程程序。
Windows CE 镜像中需要包括 DCOM 组件服务
不幸的是由于系统空间的限制,很多基于 Windows CE 系统的 OS 都不支持 DCOM 。 需要使用 Platfom Builder 向我们的 Windows CE 镜像中添加 DCOM 。
另外必须导出支持 DCOM API 的 Windows CE SDK 开发包。
其它的一些工具我们需要准备的注册工具
google GuiRegsvrCE.exe 注册你的 COM DLLs
这类工具可以在网上搜索到
创建 COM Server
由于 Windows CE 不支持自动化列集 / 散集,因此我们需要建立自己的代理 / 存根,用与 COM Server 和 Client 之间的接口方法参数的列集与散集。当然,在 windows XP/2000 系统中,如果我们在 COM 方法中使用 OLE 兼容的数据类型,我们可以不提供代理 / 存根 DLL 。如果需要使用自定义的数据类型则都需要建立对应的代理 / 存根代码,并注册之后才能使用。
由于上述原因,开发 WindowsCE COM Server 时,需要将 IDL 文件 LIBRARY 块中的 dispinterface 定义代码移到 LIBRARY 块外部来。所有的接口都必须在 LIBRARY 快的外部定义,这样 MIDL 编译器将生成恰当的代理 / 存根代码。
注意, sink dispainterface 接口被重定义,被标识为 dual 并从 IDispatch 接口派生。
代理存根 DLL 的创建 Proxy/Stub
和 PC 端的代理存根的创建差不多,需要注意的是,需要定义一些宏才能编译通过。另外定义一个 def 文件,注明要到处的函数。
编译好以上两个工程之后,基本上进程外 COM Server 工作算是完成了。在机器是使用是还需注册才行。
如何调用进程外组件 ( Client 程序)
对应客户端而已,基本上和调用进程内组件没什么区别了。在这里我提供了一些辅助代码《EventHandler.h》,协助客户端在不使用 ATL 情况下接受 COM Server 的事件。

源代码下载:
http://blog.csdn.net/tttyd/archive/2011/03/10/6237904.aspx
Windows CE提供以下几种COM-Base的应用
1. Minimal COM提供最基础的COM开发接口(API),每个com对象的创建大概需要10~20K。
2. COM提供了普通COM和OLE自动化实现的支持,只能实现自由线程模型、进程内的COM对象。各个COM对象创建大概需要100~200K。
3. DCOM提供了COM所有功能的支持,包括远程设备COM服务。每个对象最少需要700K。
在 默认状态下,由于安全角度考虑,远程服务功能是关闭的;使得DCOM只能提供本地服务,服务进程可连接Internet。要启用远程COM服务功能需要将SYSGEN_DCOM_REMOTEACCESS置为1.
4. COM Storage将结构化存储功能加入了Mini COM、COM、DCOM的实现。
通过上面几点可知,只有DCOM才具有开发进程外组件的能力。
因此想要开发WINCE进程外的组件步骤
1.将DCOM组件加入OS中
2.导出相应的SDK
这篇文章说明了如何使用 WindowS CE 6.0 系统的 DCOM ,开发 com 服务进程。向客户端提供跨进程的 COM 组件服务,以及自定义接口代理 / 存根 dll 的建立,注册。
假定你需要创建一个实时的控制程序,需要一直在后台运行着,而你的客户端却是多个或多样性,客户端的开发语言不确定性。这就需要创建一个 COM 服务进程程序。
Windows CE 镜像中需要包括 DCOM 组件服务
不幸的是由于系统空间的限制,很多基于 Windows CE 系统的 OS 都不支持 DCOM 。 需要使用 Platfom Builder 向我们的 Windows CE 镜像中添加 DCOM 。
另外必须导出支持 DCOM API 的 Windows CE SDK 开发包。
其它的一些工具我们需要准备的注册工具
google GuiRegsvrCE.exe 注册你的 COM DLLs
这类工具可以在网上搜索到
创建 COM Server
由于 Windows CE 不支持自动化列集 / 散集,因此我们需要建立自己的代理 / 存根,用与 COM Server 和 Client 之间的接口方法参数的列集与散集。当然,在 windows XP/2000 系统中,如果我们在 COM 方法中使用 OLE 兼容的数据类型,我们可以不提供代理 / 存根 DLL 。如果需要使用自定义的数据类型则都需要建立对应的代理 / 存根代码,并注册之后才能使用。
由于上述原因,开发 WindowsCE COM Server 时,需要将 IDL 文件 LIBRARY 块中的 dispinterface 定义代码移到 LIBRARY 块外部来。所有的接口都必须在 LIBRARY 快的外部定义,这样 MIDL 编译器将生成恰当的代理 / 存根代码。
注意, sink dispainterface 接口被重定义,被标识为 dual 并从 IDispatch 接口派生。
[
object,
uuid(8D2D2A49-E8D3-4630-924D-1F83A4B063DB),
dual,
nonextensible,
helpstring("IAlgorithm 接口"),
pointer_default(unique)
]
interface IAlgorithm : IDispatch{
[id(1), helpstring("方法Add")] HRESULT Add([in] LONG n1, [in] LONG n2, [out,retval]LONG* nVal);
[id(2), helpstring("方法Minus")] HRESULT Minus([in] LONG n1, [in] LONG n2, [out,retval] LONG* nVal);
[id(3), helpstring("方法Input")] HRESULT Input([in] BSTR str);
};
#ifdef UNDER_CE
[
uuid(C33B6BCD-ABBB-4E80-8E55-F34CC867BE83),
dual,
helpstring("_IAlgorithmEvents 接口")
]
interface _IAlgorithmEvents : IDispatch
{
//properties:
//methods:
[id(1), helpstring("方法Output")] HRESULT Output([in] BSTR str);
};
#endif //UNDER_CE
[
uuid(4EC8BE3C-DF5C-4E56-B1F5-9350266E32FC),
version(1.0),
helpstring("ServDemo 1.0 类型库")
]
library ServDemoLib
{
importlib("stdole2.tlb");
interface IDocHostUIHandlerDispatch;
interface IAxWinAmbientDispatchEx;
#ifndef UNDER_CE
[
uuid(C33B6BCD-ABBB-4E80-8E55-F34CC867BE83),
helpstring("_IAlgorithmEvents 接口")
]
dispinterface _IAlgorithmEvents
{
properties:
methods:
};
#endif //UNDER_CE
[
uuid(9EEFFB69-1604-4DA2-A12A-FAB65CE9D587),
helpstring("Algorithm Class")
]
coclass Algorithm
{
[default] interface IAlgorithm;
[default, source] dispinterface _IAlgorithmEvents;
};
};代理存根 DLL 的创建 Proxy/Stub
和 PC 端的代理存根的创建差不多,需要注意的是,需要定义一些宏才能编译通过。另外定义一个 def 文件,注明要到处的函数。
// dlldata.c 的包装
//#ifdef _MERGE_PROXYSTUB // 合并代理存根(stub) DLL
#define REGISTER_PROXY_DLL //DllRegisterServer 等
#ifndef _WIN32_WCE
#define _WIN32_WINNT 0x0400 //对于 WinNT 4.0 或安装了 DCOM 的 Win95
#else
#define WIN32
#endif
#define USE_STUBLESS_PROXY //仅当使用 MIDL 开关 /Oicf 时定义
#ifndef _WIN32_WCE
#pragma comment(lib, "rpcns4.lib")
#endif
#pragma comment(lib, "rpcrt4.lib")
//#define ENTRY_PREFIX Prx
#include "dlldata.c"
#include "ServDemo_p.c"编译好以上两个工程之后,基本上进程外 COM Server 工作算是完成了。在机器是使用是还需注册才行。
如何调用进程外组件 ( Client 程序)
对应客户端而已,基本上和调用进程内组件没什么区别了。在这里我提供了一些辅助代码《EventHandler.h》,协助客户端在不使用 ATL 情况下接受 COM Server 的事件。

源代码下载:
http://blog.csdn.net/tttyd/archive/2011/03/10/6237904.aspx
...全文
相关推荐
Wince 进程外组件
Windows CE进程外组件,通常指的是在Windows CE操作系统中运行的非主线程应用程序组件,它们可以在独立于主应用程序进程的环境中执行,提供服务或者扩展系统功能。
Windows CE系统应用开发编程-源代码.rar
《Windows CE系统应用开发编程》是一本专注于在Windows CE平台上进行应用程序开发的教程。
Windows CE系统应用开发编程教案及源代码
《Windows CE系统应用开发编程教案及源代码》是针对初学者设计的一套全面教程,旨在帮助新手快速掌握在Windows CE平台上进行应用开发的基本技能。
Windows CE系统应用开发编程-电子教案.rar
这门课程的目标是让学生理解和掌握在Windows CE环境下创建高效、稳定的应用程序所需的技术和实践。在Windows CE系统应用开发中,首先需要了解的是系统的基本架构和组件。
Windows CE 体系结构与应用开发
《Windows CE 体系结构与应用开发》是一本深入探讨Windows CE操作系统核心以及其在嵌入式软件开发中的应用的专业书籍。


