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对象,支持一个特殊的接口IClassFactory。 3、COM库 COM库是组件程序与客户程序之间的桥梁。 COM库的应用主要包括: COM库的初始化 COM库的内存管理 组件程序的装载和卸载等 4...
CClassFactory,CInputMethod和CIMWnd
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 ...
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对象,模块_创建Ax组件,模块_动态调用COM,取指针_对象,取指针_类厂,A2W,取指针_整数,取指针_字节集,IClassFactory_QueryInterface,IClassFactory_AddRef,IClassFactory_...
易语言动态调用com模块源码,动态调用com模块,模块_动态调用COM,取指针_对象,取指针_类厂,A2W,取指针_整数,取指针_字节集,模块_调用子程序,IClassFactory_QueryInterface,IClassFactory_AddRef,IClassFactory_Release...
从ICLassFactory 为 CLSID的COM组建创建实例失败 SQLServer创建维护计划失败 错误c001f011
HRESULT hr=(fnGCO)(__uuidof(dmsoft), IID_IClassFactory, (void**)&pcf;); if (SUCCEEDED(hr) && (pcf != NULL)) { hr = pcf->CreateInstance(NULL, __uuidof(Idmsoft), (void**)&m_dm); if ((SUCCEEDED(hr) ...
实现了IClassFactory从IClassFactory->CreateInstance实例化对象。 从而实现免注册ActiveX调用其库包含的Com对象。 基本原理就是:从ActiveX库中取DllGetClassObject 创建类工厂,再从类工厂实例化对象。 傲月清风
易语言大漠免注册调用演示源码,大漠免注册调用演示,置大漠全路径,创建大漠对象,LoadFileTypeInfo,DllGetClassObject,CLSIDToString,GetCLSMethod,IUnknown_Release,IClassFactory_CreateInstance,ITypeLib_...
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....