表 ATL的工程结构
文件名 | 说明 |
ProjectName.cpp | 它是主工程文件。里面包含了COM所需的支持函数,这些函数用来为你的组件提供宿主文件。 |
ProjectName.h | 组件在宿主文件里的接口声明。MIDL编译器自动生成了该文件。 编译工程的IDL的文件就是为了生成该文件。 |
ProjectName.idl | 你的工程的IDL文件。你可以在这里添加接口和方法定义。MIDL心编译器处理该文件并为工程生成一个类型库。对于每一个工程而言,只有一个IDL文件,所以工程里的所有组件共享该文件 |
ProjectName.tlb | 宿主文件的二进制类型库。使用MIDL编译器编译IDL文件后就可以生成该文件。 |
ProjectName.def | 它是Windows的定义文件。对于DLL工程而言,该文件包含了公开的入口点。ProjectName.def文件并不是为EXE工程而创建的。 |
ProjectName_i.c | 它是编译完IDL文件后生成的文件,里面包含了在工程里对所有的ClSID和IID的定义。 |
ProjectName_p.c | 它是工程的代理/占位程序(proxy/stub)代码。由MIDL编译器生成该文件 |
ProjectNamePS.mk | 该命令行为工程的代理/占位DLL文件创建文件。 |
ProjectNamePS.dll | 由上面的make文件生成的代理/占位DLL文件。 |
DLLDATA.C | 代理/占位DLL文件工程的数据结构定义。 |
RESOURCE.H | 工程的资源定义文件。 |
ProjectName.rc | 工程的资源文件 |
STDAFX.H和STDAFX.CPP | ATL框架里的定义和包含信息 |
Object Wizard创建的文件
文件名 | 说明 |
ObjectName.h和ObjectName.cpp | 对象的头文件和实现文件 |
ObjectName.rgs | 对象的注册脚本。该文件包含了注册项目。组件可以通过它进行自注册 |
作为一个基本的、非集合的例子,这里的CComObjectRoot为你提供了InternalAddRef、
InternalRelease和InternalQueryInterface等引用计数的内部管理方法;CComCoClass提供了对类工厂的支持;IMath和IAdvancedMath为你提供了抽象的接口类。所有这些组合在一起生成了CMath类。ATL接着又深入一步。为了创建实例,它使用CMath作为CComObject的模板参数,使CComObject从CMath中派生出来。
IMath* pIMath = new CComObject<CMath>