下载本文示例代码
一、前言 1、与 《COM组件设计与应用之VC6中用ATL写组件》的内容基本一致。但本回讲解的是在 vc.net 2003 下的使用方法,即使你不再使用vc6.0,也请和上一回的内容,参照比对。 2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成两个数值的加法,Cat()完成两个字符串的连接。 3、下面......好好听讲! 开始了。
二、建立 ATL 工程 步骤2.1:建立一个解决方案。 步骤2.2:在 该解决方案中,新建一个 vc 的 ATL 项目。示例程序叫 Simple2,并选择DLL方式,见图一、图二。图一、新建 ATL 项目图二、选择非属性化的DLL组件类型 属性化 属性化编程,是未来的方向,但我们现在先不要选它。 动态链接库(DLL) 选择它。 可执行文件(EXE) 以后再讲。 服务(EXE) 表示建立一个系统服务组件程序,系统启动后就会加载并执行的程序。 允许合并代理/存根(stub)代码 选择该项表示把“代理/存根”代码合并到组件程序中,否则需要单独编译,单独注册代理存根程序。代理/存根,这个是什么概念?还记得我们在上回书中介绍的吗?当调用者调用进程外或远程组件功能的时候,其实是代理/存根负责数据交换的。关于代理/存根的具体变成和操作,以后再说啦...... 支持 MFC 除非有特殊的原因,我们写 ATL 程序,最好不要选择该项。你可能会说,如果没有MFC的支持,那CString怎么办呀?告诉你个秘密吧,一般人我都不告诉他,我后半辈子就靠着这个秘密活着了: 1、你会STL吗?可以用 STL 中的 string 代替; 2、自己写个 MyString 类,嘿嘿; 3、悄悄地、秘密地、不要告诉别人(特别是别告诉微软),把 MFC 中的 CString 源码拿过来用; 4、使用 CComBSTR 类,至少也能简化我们字符串操作; 5、直接用 API 操作字符串,反正我们大家学习 C 语言的时候,都是从这里干起的。(等于没说,呵呵) 支持 COM 1.0 支持事务处理的 COM 功能。COM 也许在第 99 回介绍吧。 三、添加 ATL 对象类 步骤3.1:菜单"项目\添加类..."(或者用鼠标右键在 项目中弹出菜单"添加\添加类...")并选择 ATL 简单对象。见图三。图三、选择建立ATL简单对象 除了简单对象(只实现了 IUnknown 接口),还可以选择“ATL控件”(ActiveX,实现了10多个接口)......可以选择的组件对象类型很多,但本质上,就是让向导帮我们默认加上一些接口。在以后的文章中,陆续介绍吧。 步骤3.2:增加自定义类 CFun(接口 IFun) ,见图四。 图四、填写名称 其实,我们只需要输入简称,其它的项目会自动填写。没什么多说的,只请大家注意一下 ProgID 项,默认的 ProgID 构造方式为“项目名.简称名”。 步骤3.3:填写接口属性选项,见图五。图五、接口选项 线程模型 COM 中的线程,我认为是最讨厌,最复杂的部分。COM 线程和公寓的概念,留待后续介绍。现在吗......大家都选"单元"(Apartment),它代表什么那?简单地说:当在线程中调用组件函数的时候,这些调用会排队进行。因此,这种模式下,我们可以暂时不用考虑同步的问题。(注1) 接口 双重(Dual),这个非常 非常重要,非常非常常用,但我们今天不讲(注2)。切记!切记!我们的这第一个 COM 程序中,一定要选择“自定义”!!!!(如果你选错了,请删除全部内容,重新来过。) 聚合 我们写的组件,将来是否允许被别人聚合(注3)使用。“只能创建为聚合”,有点类似 C 中的纯虚类,你要是总工程师,只负责设计但不亲自写代码的话,才选择它。 ISupportErrorInfo 是否支持丰富信息的错误处理接口。以后就讲。 连接点 是否支持连接点接口(事件、回调)。以后就讲。 IObjectWithSite 是否支持IE的调用共2页。 1 2 :
一、前言 1、与 《COM组件设计与应用之VC6中用ATL写组件》的内容基本一致。但本回讲解的是在 vc.net 2003 下的使用方法,即使你不再使用vc6.0,也请和上一回的内容,参照比对。 2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成两个数值的加法,Cat()完成两个字符串的连接。 3、下面......好好听讲! 开始了。
二、建立 ATL 工程 步骤2.1:建立一个解决方案。 步骤2.2:在 该解决方案中,新建一个 vc 的 ATL 项目。示例程序叫 Simple2,并选择DLL方式,见图一、图二。图一、新建 ATL 项目图二、选择非属性化的DLL组件类型 属性化 属性化编程,是未来的方向,但我们现在先不要选它。 动态链接库(DLL) 选择它。 可执行文件(EXE) 以后再讲。 服务(EXE) 表示建立一个系统服务组件程序,系统启动后就会加载并执行的程序。 允许合并代理/存根(stub)代码 选择该项表示把“代理/存根”代码合并到组件程序中,否则需要单独编译,单独注册代理存根程序。代理/存根,这个是什么概念?还记得我们在上回书中介绍的吗?当调用者调用进程外或远程组件功能的时候,其实是代理/存根负责数据交换的。关于代理/存根的具体变成和操作,以后再说啦...... 支持 MFC 除非有特殊的原因,我们写 ATL 程序,最好不要选择该项。你可能会说,如果没有MFC的支持,那CString怎么办呀?告诉你个秘密吧,一般人我都不告诉他,我后半辈子就靠着这个秘密活着了: 1、你会STL吗?可以用 STL 中的 string 代替; 2、自己写个 MyString 类,嘿嘿; 3、悄悄地、秘密地、不要告诉别人(特别是别告诉微软),把 MFC 中的 CString 源码拿过来用; 4、使用 CComBSTR 类,至少也能简化我们字符串操作; 5、直接用 API 操作字符串,反正我们大家学习 C 语言的时候,都是从这里干起的。(等于没说,呵呵) 支持 COM 1.0 支持事务处理的 COM 功能。COM 也许在第 99 回介绍吧。 三、添加 ATL 对象类 步骤3.1:菜单"项目\添加类..."(或者用鼠标右键在 项目中弹出菜单"添加\添加类...")并选择 ATL 简单对象。见图三。图三、选择建立ATL简单对象 除了简单对象(只实现了 IUnknown 接口),还可以选择“ATL控件”(ActiveX,实现了10多个接口)......可以选择的组件对象类型很多,但本质上,就是让向导帮我们默认加上一些接口。在以后的文章中,陆续介绍吧。 步骤3.2:增加自定义类 CFun(接口 IFun) ,见图四。 图四、填写名称 其实,我们只需要输入简称,其它的项目会自动填写。没什么多说的,只请大家注意一下 ProgID 项,默认的 ProgID 构造方式为“项目名.简称名”。 步骤3.3:填写接口属性选项,见图五。图五、接口选项 线程模型 COM 中的线程,我认为是最讨厌,最复杂的部分。COM 线程和公寓的概念,留待后续介绍。现在吗......大家都选"单元"(Apartment),它代表什么那?简单地说:当在线程中调用组件函数的时候,这些调用会排队进行。因此,这种模式下,我们可以暂时不用考虑同步的问题。(注1) 接口 双重(Dual),这个非常 非常重要,非常非常常用,但我们今天不讲(注2)。切记!切记!我们的这第一个 COM 程序中,一定要选择“自定义”!!!!(如果你选错了,请删除全部内容,重新来过。) 聚合 我们写的组件,将来是否允许被别人聚合(注3)使用。“只能创建为聚合”,有点类似 C 中的纯虚类,你要是总工程师,只负责设计但不亲自写代码的话,才选择它。 ISupportErrorInfo 是否支持丰富信息的错误处理接口。以后就讲。 连接点 是否支持连接点接口(事件、回调)。以后就讲。 IObjectWithSite 是否支持IE的调用共2页。 1 2 :
下载本文示例代码
COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件COM组件设计与应用之.NET中用ATL写组件
阅读(109) | 评论(0) | 转发(0) |