0

0

Windows CE 系统进程外组件应用开发

絕刀狂花

絕刀狂花

发布时间:2025-05-06 18:08:14

|

946人浏览过

|

来源于php中文网

原创

本文详细介绍了如何在 windows ce 6.0 系统上开发 dcom 服务进程,以提供跨进程的 com 组件服务,并创建和注册自定义接口代理/存根 dll。

假设您需要开发一个实时控制程序,该程序需要在后台持续运行,而客户端可能多样且使用不同的开发语言。这就需要创建一个 COM 服务进程程序。

在 Windows CE 镜像中,必须包含 DCOM 组件服务。然而,由于系统空间限制,许多基于 Windows CE 的操作系统不支持 DCOM。您需要使用 Platform Builder 向 Windows CE 镜像中添加 DCOM。此外,还必须导出支持 DCOM API 的 Windows CE SDK 开发包。

其他必备工具包括用于注册 COM DLL 的 GuiRegsvrCE.exe,这类工具可以在网上找到。

创建 COM Server

由于 Windows CE 不支持自动化封送/解封送,我们需要为 COM Server 和 Client 之间的接口方法参数创建自己的代理/存根。在 Windows XP/2000 系统中,如果 COM 方法使用 OLE 兼容的数据类型,我们可以不提供代理/存根 DLL。但如果使用自定义数据类型,则需要创建并注册相应的代理/存根代码。

在开发 Windows CE COM Server 时,需要将 IDL 文件中的 LIBRARY 块中的 dispinterface 定义移到 LIBRARY 块外部。所有接口都必须在 LIBRARY 块外部定义,这样 MIDL 编译器才能生成正确的代理/存根代码。

注意,sink dispinterface 接口需要重新定义为 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 的创建

Ke361开源淘宝客系统
Ke361开源淘宝客系统

Ke361是一个开源的淘宝客系统,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制, 融合了模块化、驱动化和插件化的设计理念于一体,以帮助想做淘宝客而技术水平不高的朋友。突破了传统淘宝客程序对自动采集商品收费的模式,该程序的自动 采集模块对于所有人开放,代码不加密,方便大家修改。集成淘点金组件,自动转换淘宝链接为淘宝客推广链接。K

下载

创建代理存根 DLL 与 PC 端类似,但需要定义一些宏才能编译通过,并定义一个 def 文件,注明要导出的函数。

// dlldata.c 的包装

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_PREFIXPrx

include "dlldata.c"

include "ServDemo_p.c"

编译完成后,进程外 COM Server 的开发基本完成,但需要在机器上注册才能使用。

如何调用进程外组件(Client 程序)

对于客户端,调用进程外组件与调用进程内组件基本相同。我提供了一些辅助代码《EventHandler.h》,帮助客户端在不使用 ATL 的情况下接收 COM Server 的事件。

Windows CE 系统进程外组件应用开发

源代码下载:https://www.php.cn/link/85d52e4d4b40d62fa159037686630a7c

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

310

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1155

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

214

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1956

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

22

2026.01.19

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

810

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1129

2023.07.27

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.1万人学习

Excel 教程
Excel 教程

共162课时 | 14.5万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号