使用VS2005创建COM

来源:互联网 发布:excel 对数据进行统计 编辑:程序博客网 时间:2024/05/22 06:24

    本文使用Wizard模式创建COM。

    一、ATL项目向导

            使用ATL Project Wizard创建COM。

            1. 建立ATL工程

                File->New->Project

                

                选择“ATL”中“ATL Project”。

 

               注意,红框中的名称即是要生成DLL文件的名称


        2. 概述

            默认情况下的设置。

            


          3. 工程设置

            我们可以自定义设置工程情况。



               Atrributed: 属性化

               属性化项目不允许 MFC 支持和合并代理/存根 (stub) 代码。

               默认情况下,其他将对象和控件插入项目的 ATL 向导使用属性化代码。


             我们不生成ocx插件的情况下,不勾选此项。


    二、ATL简单对象向导

            1. 创建ATL Simple Object

                右击项目名称,选择Add-〉Class

                

               选择“ATL Simple Object”

               

               点击“Add”进入设置向导。


        2.  设置类名

              


       3. 设置选项

           

          默认状态下。


          我么需要错误支持和链接点

          


    三、添加方法向导

         切换到“Class View”选项卡上,选择接口(ItestSOW),右击add-〉Add Method

         


         添加方法名称以及参数

         

          

         进行IDL属性设置,默认即可。

         


       生成的文件

       testSOW.h

// testSOW.h : Declaration of the CtestSOW#pragma once#include "resource.h"       // main symbols#include "testATL.h"#include "_ItestSOWEvents_CP.h"#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."#endif// CtestSOWclass ATL_NO_VTABLE CtestSOW :public CComObjectRootEx<CComSingleThreadModel>,public CComCoClass<CtestSOW, &CLSID_testSOW>,public ISupportErrorInfo,public IConnectionPointContainerImpl<CtestSOW>,public CProxy_ItestSOWEvents<CtestSOW>,public IDispatchImpl<ItestSOW, &IID_ItestSOW, &LIBID_testATLLib, /*wMajor =*/ 1, /*wMinor =*/ 0>{public:CtestSOW(){}DECLARE_REGISTRY_RESOURCEID(IDR_TESTSOW)BEGIN_COM_MAP(CtestSOW)COM_INTERFACE_ENTRY(ItestSOW)COM_INTERFACE_ENTRY(IDispatch)COM_INTERFACE_ENTRY(ISupportErrorInfo)COM_INTERFACE_ENTRY(IConnectionPointContainer)END_COM_MAP()BEGIN_CONNECTION_POINT_MAP(CtestSOW)CONNECTION_POINT_ENTRY(__uuidof(_ItestSOWEvents))END_CONNECTION_POINT_MAP()// ISupportsErrorInfoSTDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);DECLARE_PROTECT_FINAL_CONSTRUCT()HRESULT FinalConstruct(){return S_OK;}void FinalRelease(){}public:         STDMETHOD(testMehod1)(BSTR inParam);};OBJECT_ENTRY_AUTO(__uuidof(testSOW), CtestSOW)

       testSOW.cpp

// testSOW.cpp : Implementation of CtestSOW#include "stdafx.h"#include "testSOW.h"// CtestSOWSTDMETHODIMP CtestSOW::InterfaceSupportsErrorInfo(REFIID riid){static const IID* arr[] = {&IID_ItestSOW};for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++){if (InlineIsEqualGUID(*arr[i],riid))return S_OK;}return S_FALSE;}STDMETHODIMP CtestSOW::testMehod1(BSTR inParam){      // TODO: Add your implementation code here      return S_OK;}



    参考文章(MSDN)

    1. ATL 项目向导

    2. ATL 项目向导的应用程序设置

    3. 添加 ATL 简单对象

    4. ATL 简单对象向导

    5. “ATL 简单对象向导”的“选项”

    6. 添加方法


1 0