`
mengdejun
  • 浏览: 410387 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

COM IClassFactory接口封装

    博客分类:
  • Com
 
阅读更多
CAbstractClassFactory.h
#include <objbase.h>
#include <unknwn.h>
#define DECLARE_IUNKNOWN_INTERFACE														\
	public:																				\
	virtual HRESULT _stdcall QueryInterface(const IID& riid,void** ppvObject);			\
	virtual ULONG _stdcall AddRef ();													\
	virtual ULONG _stdcall Release();
class CAbstractClassFactory:public IClassFactory
{
public:
	CAbstractClassFactory();
	DECLARE_IUNKNOWN_INTERFACE
	virtual HRESULT _stdcall CreateInstance(IUnknown *pUnkOuter,const IID& riid,void** ppvObject)=0;
    virtual HRESULT _stdcall LockServer(BOOL fLock);
	long m_caref,g_caref;
};
const CLSID CLSID_CAbstractClassFactory = {0x59F6C62A,0x50BE,0x4687,{0x95,0x80,0x59,0xC4,0x8F,0x94,0xE5,0xD8}};

 

CAbstractClassFactory.cpp
#include "CAbstractClassFactory.h"
CAbstractClassFactory::CAbstractClassFactory(){m_caref=1;g_caref=1;}
HRESULT _stdcall CAbstractClassFactory::QueryInterface(const IID& riid,void** ppvObject)
{
	if(riid==IID_IUnknown||riid==IID_IClassFactory)
	{
		*ppvObject=static_cast<IClassFactory*>(this);
	}
	else
	{
		*ppvObject=NULL;
		return E_NOINTERFACE;
	}
	return S_OK;
	
}
ULONG _stdcall CAbstractClassFactory::AddRef()
{
	return InterlockedIncrement(&m_caref);
}
ULONG _stdcall CAbstractClassFactory::Release()
{
	if(InterlockedDecrement(&m_caref)==0)
	{
		delete this;
		return 0;
	}
	return m_caref;
}
HRESULT _stdcall CAbstractClassFactory::LockServer(BOOL fLock)
{
	if(fLock)
	{
		InterlockedIncrement(&g_caref);
	}
	else
	{
		InterlockedDecrement(&g_caref);
	}
	return S_OK;
}

 

分享到:
评论

相关推荐

    jiqiao.rar_visual c_接口技术

    这是通过实现IClassFactory和IUnknown接口,以及使用Type Library导出COM对象实现的。 4. **ATL(Active Template Library)**:ATL是微软为简化COM编程而设计的一个模板库。它提供了一系列的宏和模板类,帮助...

    COM(activex)使用自定义类型传递数据

    类工厂实现了`IClassFactory`接口,负责根据接口实例化对象。 5. 接口继承:自定义类型通常会继承自`IUnknown`接口,这是所有COM接口的基础,包含了`QueryInterface`、`AddRef`和`Release`三个方法,用于接口查询、...

    COM编程技术基础

    3. **类工厂(Class Factory)**:用于创建对象实例,遵循IClassFactory接口规范。 4. **组件(Component)**:封装了实现特定功能的一组对象和接口。 5. **容器(Container)**:宿主应用程序,负责创建和管理组件...

    COM开发的资料.ppt

    如`DECLARE_INTERFACE_(IClassFactory, IUnknown)`宏用于声明从IUnknown派生的IClassFactory接口,其中`STDMETHOD`宏用于声明接口方法,如`QueryInterface`、`AddRef`、`Release`等。`DECLARE_INTERFACE(iface)`用于...

    用VC进行COM编程所必须掌握的理论知识

    6. **类工厂(Class Factory)**:创建和实例化COM组件的对象,通过实现IClassFactory接口来完成。 7. **线程模型(Thread Model)**:COM组件可以工作在不同的线程上下文中,如单线程 apartment(STA)、多线程 ...

    高级软件工程09VC与COM、CORBA与COM比较.ppt

    COleObjectFactory是ATL中用于创建COM对象的类工厂模板,它实现了IClassFactory接口,允许其他组件实例化和创建ATL COM对象。 在COM与MFC的关系中,MFC的类库提供了一种更面向对象、更抽象的方式来处理COM编程,...

    COM技术内幕

    3. **COM类工厂**:解释类工厂(Class Factory)的作用,它是创建COM组件实例的关键,如何实现IClassFactory接口来创建和释放组件实例。 4. **线程模型**:讨论COM组件支持的不同线程模型,如Apartment Threading和...

    COM in plain C

    IClassFactory接口用于创建新的COM对象实例。实现这个接口的类可以被注册到系统中,这样其他应用程序就可以通过COM服务来创建对象实例。IClassFactory对象通常会提供两个方法:`CreateInstance`用于创建指定类的新...

    利用ATL编写COM组件.ppt

    6. 使用类工厂:实现IClassFactory接口,用于创建组件实例。 15.3章节讲解了如何在VC和VB中使用COM组件,包括: - 在VC中调用组件:通过CoCreateInstance创建组件实例,然后使用QueryInterface获取所需接口。 - 在...

    COM技术内幕源码 经典的com书籍随书源码

    COM的核心思想是对象的封装、接口和多态性,它为软件开发提供了标准化的组件重用机制。本资料集合了"COM技术内幕"一书的随书源码,这是一本深入解析COM技术的经典著作。 在COM技术中,每个组件都是一个独立的二进制...

    基于ADO的数据处理接口设计.pdf

    文章中提到的设计方法,包括了ATL对维护代价较高的数据类型(如接口指针、VARIANT)提供包装类,实现了基本的COM接口(如IUnknown、IClassFactory、IDispatch等),并管理了COM服务器的类,这些类负责暴露类对象、自...

    MYCOM.rar_mycom.com

    2. 创建类工厂:类工厂负责创建COM对象实例,实现IClassFactory接口。 3. 注册组件:使用regsvr32工具或在代码中调用CoRegisterClassObject函数,将组件注册到系统注册表中。 4. 在IE中使用:通过JavaScript或其他...

    COM组件开发文档 介绍COM开发的基础知识

    在COM开发中,Win32 SDK提供了对COM库函数的支持,例如,`Unknwn.h`包含了基本的`IUnknown`和`IClassFactory`接口定义,`Wtypes.h`包含了COM常用数据类型的声明,`Objidl.h`定义了所有标准接口,`Comdef.h`存储了...

    COM组件设计与应用

    4. **类工厂(Class Factory)**:类工厂是创建COM对象实例的工厂类,它实现了IClassFactory接口,负责实例化COM对象。 5. **注册与卸载**:COM组件需要在系统注册表中登记,以便其他组件或应用程序能找到并使用...

    《COM原理与应用》源码

    COM的核心概念是组件,组件是可重用的软件单元,它封装了特定的功能并提供标准化接口供其他程序调用。COM组件可以是动态链接库(DLLs)、可执行文件或系统服务。通过COM,开发者能够创建跨语言、跨平台的分布式应用...

    用标准C编写COM

    IClassFactory是COM定义的一个接口,用于创建COM对象实例。COM库使用这个接口来请求类工厂对象,然后通过工厂对象来创建和销毁COM对象实例。 ### 打包到DLL中 为了简化COM对象的使用和分发,通常会将COM对象实现...

    C++ COM组建资源

    `IClassFactory`接口是类工厂的标准接口,用于创建和销毁组件实例。 5. **导出库**:COM组件通常被编译成动态链接库(DLL),以便在运行时动态加载。我们需要在DLL中声明`DllGetClassObject`和`DllCanUnloadNow`等...

    用OPC接口实现专家系统与WinCC互联.pdf

    MFC提供了一个通用的类厂COleObjectFactory,它继承自CCmdTarget类,并实现了IClassFactory2接口。有了类厂对象后,就可以使用其CreateInstance成员函数创建COM对象了。 OPCServer应用程序主要包含三个部分:Server...

Global site tag (gtag.js) - Google Analytics