`
mengdejun
  • 浏览: 400410 次
  • 性别: 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;
}

 

分享到:
评论

相关推荐

    实现一个COM组件(源代码+实验报告)

     类厂本身也是一个COM对象,支持一个特殊的接口IClassFactory。 3、COM库  COM库是组件程序与客户程序之间的桥梁。  COM库的应用主要包括:  COM库的初始化  COM库的内存管理  组件程序的装载和卸载等 4...

    iclassfactory iinputmethod ce wince 输入法 代码

    CClassFactory,CInputMethod和CIMWnd

    Visual C++实践与提高-COM和COM+篇『PDF』

    2.5.4 标准类厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 ...

    COM技术内幕——微软组件对象模型--随书源代码

    1.2.2 信息封装 5 1.3 COM 6 1.3.1 COM组件是…… 7 1.3.2 COM不是…… 7 1.3.3 COM库 8 1.3.4 COM方法 8 1.3.5 COM超越了用户的需要 8 1.4 本章小结 9 第2章 接口 11 2.1 接口的作用 11 2.1.1 可复用应用...

    易语言免注册调用com对象

    易语言免注册调用com对象源码,免注册调用com对象,模块_创建Ax组件,模块_动态调用COM,取指针_对象,取指针_类厂,A2W,取指针_整数,取指针_字节集,IClassFactory_QueryInterface,IClassFactory_AddRef,IClassFactory_...

    易语言动态调用com模块

    易语言动态调用com模块源码,动态调用com模块,模块_动态调用COM,取指针_对象,取指针_类厂,A2W,取指针_整数,取指针_字节集,模块_调用子程序,IClassFactory_QueryInterface,IClassFactory_AddRef,IClassFactory_Release...

    SQLserver2005_bc_dts双文件.rar

    从ICLassFactory 为 CLSID的COM组建创建实例失败 SQLServer创建维护计划失败 错误c001f011

    VS2017真正免注册调用大漠插件示例

    HRESULT hr=(fnGCO)(__uuidof(dmsoft), IID_IClassFactory, (void**)&pcf;); if (SUCCEEDED(hr) && (pcf != NULL)) { hr = pcf-&gt;CreateInstance(NULL, __uuidof(Idmsoft), (void**)&m_dm); if ((SUCCEEDED(hr) ...

    易语言-免注册调用Com模块 易语言版

    实现了IClassFactory从IClassFactory-&gt;CreateInstance实例化对象。 从而实现免注册ActiveX调用其库包含的Com对象。 基本原理就是:从ActiveX库中取DllGetClassObject 创建类工厂,再从类工厂实例化对象。 傲月清风

    易语言大漠免注册调用演示

    易语言大漠免注册调用演示源码,大漠免注册调用演示,置大漠全路径,创建大漠对象,LoadFileTypeInfo,DllGetClassObject,CLSIDToString,GetCLSMethod,IUnknown_Release,IClassFactory_CreateInstance,ITypeLib_...

    org.eclipse.swt.win32

    org.eclipse.swt.SWT.class org.eclipse.swt.SWTError.class org.eclipse.swt.SWTException.class org.eclipse.swt.accessibility.ACC.class org.eclipse.swt.accessibility.Accessible.class org.eclipse.swt....

Global site tag (gtag.js) - Google Analytics