atl 向导生成的文件 和 组件的构成
表 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>