用窗口的组模
组件对象模型(组模)是一个用来在窗口程序间通信的微软技术.D内置支持基本组模,用其特征,我们可自动实现高级组模特征.
这儿,我们将在库的帮助下写一个组模服务器和客户端,并看看实现.
准备
从超传://d源.组织/工程/绑定下载赢32绑定并从超传://源码仓库.组模/亚当多/组模组件模型帮助器.d文件.
如何做...
组模,像共享库,用客户端服务器模型.首先,我们将写一个组模服务器然后写其相应组模客户.
组模服务器
我们执行如下步骤来写一个组模服务器:
用一个全局标识生成工具为你的接口和类生成全局标识.
导入 赢32.未知和组件模型帮助器.
写你接口定义,从I未知继承并标记所有方法外(窗口).用组件模型全局标识属性附加i标识(接口的全局标识)到接口.每个方法应该返回H结果.
添加类标识到接口文件作为一个常数.
先前步骤的代码如下:
用类定义创建一个单独文件.从你定义的接口继承本类并用组件模型全局标识属性附加类标识到类.
在你类中用插件组件模型对象!()方法并实现你的接口.
为在你对象上允许组模自动,例如,使它从VB脚本或J脚本可用,当定义你类时也从I分发继承并添加插件I分发实现!()到类体.
在文件底部,添加插件组件模型服务器主!(你类,"程序标识","1.0")类,其中"程序标识"是你期望的程序标识(例如,"Ms标记语言2.标记语言超传")而1.0是你版本数.程序标识和版本数是客户用来定位你对象.
你可能得用dmd-d编译来允许过时特征因为赢32绑定很少更新.其代码如下:
用如下内容创建一个模块定义文件(你名.def):
编译你接口文件,类文件,模块定义文件,并下载组件模型帮助器.d文件在一起来生成你的动态库.
用注册服务32 你动态库.动态库(这将要求管理员访问计算机)注册你服务器,或用一个清单文件来允许在你客户应用不注册组模.
组模客户
我们执行如下步骤写一个组模客户:
导入组件模型帮助器.d和你为服务器创建的接口文件.
用创建对象!接口(类标识)创建对象.如果你用一个不带组件模型全局标识属性的对象,你可在接口之后的编译时实参列表中手动给它指定.或者,你可从窗口接口直接调用协创建实例.
用它.组件模型帮助的创建对象对象返回一个自动处理调用加引用和释放的包装器对象.
代码如下:
它如何工作...
D有些内置组模理解-它识别I未知接口.从它继承的都是组模对象.这有点简陋而D在库的帮助下可做得更好,因此引入组件模型帮助器.d.没必要,也不是标准库的一部分;你可自己调用窗口函数.它处理一些样板代码(带插件模板)并用一个叫用户定义属性的D特征绑定全局标识到接口和类来使代码更易写.
更多...
如果你在64位窗口系统,并构建一个32位动态库,你要用32位版本的注册服务32注册组模服务器.
领取专属 10元无门槛券
私享最新 技术干货