您的位置: 南开信息网 > 美食

属性化COM 编程简介

发布时间:2019-09-13 19:42:26

属性化编程是对C++语言的提高,它极大的减少了程序员在开发许多类型的应用程序时必须编写的代码量。在一此情况下,如IDL,它不需要外部描述文件帮助减轻维护负担。结果,属性增加了C++开发人员的生产率。这种新技术带来的好处是:

· 与C++语言典型结构相一致的熟悉的调用约定。

· 容易从基类中派生而不需要繁重的实现细节

· 用很少一些简单的声明代替大量的源代码

属性化编程将在下一版本的Visual Studio中提供给C++开发人员。

属性类型

因为属性意要以声明的方式封装特定领域的概念,所以存在很多类别的属性:

· Web 应用程序开发

使用ATL服务器通过属性可以创建高性能的Web应用程序和XML Web服务。它同时还支持性能监视API。

· COM

支持很多领域的COM开发。

· IDL

IDL属性从源代码文件中可以创建或修改相关的IDL文件而无需向导,也不需要熟悉文件的结构和语法。通过将IDL属性放到C++源文件中,开发人员可以将信息固定在一个位置,这样便易于维护。

· 数据访问

数据访问属性基于OLE DB用户模板,能自动增加代码,创建OLE DB 用户类。自动生成的代码可以执行一些任务,如打开表,执行命令,访问数据。

· 事件化

将不同的事件模型封装到一个通用接口中,以使用开发人员易于以标准方式处理不同类型的事件。

使用属性

有两种方法可以向工程中插入属性:

· 手工插入到源代码中。

· 使用向导

在向导中使用属性所要作的只是确定合适的复选框的选中状态。例如:

这个例子演示了如何通过删除你所不需要修改的代码,对你所实现的代码进行简化的。IID,UUID,ProgID等等在设计时已经为你综合了。在作为产品使用时,建议你使用支持指定期望值的属性。本例需要指出的还有没有为属性化对象提供IDL文件。

为了实现ATL类的简单的事件下沉,你需要手工向类中增加event_receiver属性下面的CmyReceiver属性。此属性然后由微软Visual C++? 编译器编译,它将用正确的代码代替属性,并将代码直接插入到对象文件中。

[event_receiver(com)]

class CMyReceiver {

void handler1(int i) { ... }

void handler2(int i, float j) { ... }

}  然后你就可以设置CmyReceiver的方法andler1 和 handler2处理来自事件源的事件(使用固有的函数__hook)。

在建立阶段,编译器将识别源文件中属性的当前表示,并能动态地分析和和验证。象从前一样,当工程建立时,编译器分析每个C++源文件,生成对象文件。然而,当编译器遇到一个属性时,它进行分析并在语法上验证。编译器然后动态地调用一个属性提供者插入代码,或在编译时作出其它修改。在这方面,属性行为与编译时向导非常相象。

下图显示了编译器与属性提供者间的关系。

注意: 属性的使用不会改变原始源文件的内容。开发人员可以为工程的每个源文件创建一个文本文件,显示属性被替代后的结果。

与大多数C++构造一样,属性也有一组特性定义了它们的正确用法。这被称为属性上下文,并且每个引用主题都存在于表中。例如coclass属性可以应用到一个现有类,而cpp_quote属性可以插入到C++源文件的任何地方。

OLE DB 示例

OLE DB提供了很多使用属性的示例。下面的代码是由下一代的Visual C++向导生成的,它使用了属性。代码显示了绑定到一个数据库表是多么容易。

总结

属性为开发人员以一种开放的感觉生成组件提供了简单而有生产率的方式。它们可以从ATL或微软基础类库(MFC)中使用,而不会减少两者的功能。下一代Visual C++将能够识别源文件中的属性,在编译时动态对它们动态地分析和验证。

查看本文来源

儿童健脾粥
小孩肚子疼不消化怎么办
小孩脸色发黄吃什么
孩子发烧怎么办39度
猜你会喜欢的
猜你会喜欢的