========================================================================
    ACTIVE TEMPLATE LIBRARY : oophm Project Overview
========================================================================

AppWizard has created this oophm project for you to use as the starting point for
writing your Dynamic Link Library (DLL).

This file contains a summary of what you will find in each of the files that
make up your project.

oophm.vcproj
    This is the main project file for VC++ projects generated using an Application Wizard.
    It contains information about the version of Visual C++ that generated the file, and
    information about the platforms, configurations, and project features selected with the
    Application Wizard.

oophm.idl
    This file contains the IDL definitions of the type library, the interfaces
    and co-classes defined in your project.
    This file will be processed by the MIDL compiler to generate:
        C++ interface definitions and GUID declarations (oophm.h)
        GUID definitions                                (oophm_i.c)
        A type library                                  (oophm.tlb)
        Marshaling code                                 (oophm_p.c and dlldata.c)

oophm.h
    This file contains the C++ interface definitions and GUID declarations of the
    items defined in oophm.idl. It will be regenerated by MIDL during compilation.

oophm.cpp
    This file contains the object map and the implementation of your DLL's exports.

oophm.rc
    This is a listing of all of the Microsoft Windows resources that the
    program uses.

oophm.def
    This module-definition file provides the linker with information about the exports
    required by your DLL. It contains exports for:
        DllGetClassObject
        DllCanUnloadNow
        DllRegisterServer
        DllUnregisterServer

/////////////////////////////////////////////////////////////////////////////
Other standard files:

StdAfx.h, StdAfx.cpp
    These files are used to build a precompiled header (PCH) file
    named oophm.pch and a precompiled types file named StdAfx.obj.

Resource.h
    This is the standard header file that defines resource IDs.


/////////////////////////////////////////////////////////////////////////////
