COM编程入门,十分浅显易懂
};
class __declspec(uuid("{7D51904E-1645-4a8c-BDE0-0F4A44FC38C4}")) CSimpleMsgBoxImpl;
当某一客户端想要创建一个SimpleMsgBox COM对象时,它应该用下面这样的代码:
ISimpleMsgBox* pIMsgBox;
HRESULT hr;
// 组件对象类的CLSID
hr = CoCreateInstance ( __uuidof(CSimpleMsgBoxImpl),
NULL, // 非聚合
CLSCTX_INPROC_SERVER, // 进程内服务器
__uuidof(ISimpleMsgBox), // 所请求接口的IID
(void**) &pIMsgBox ); // 返回的接口指针的地址
类工厂实现
我们的类工厂SimpleMsgBox是在一个叫做CSimpleMsgBoxClassFactory的C++类中实现的:
class CSimpleMsgBoxClassFactory : public IClassFactory
{
public:
CSimpleMsgBoxClassFactory();
virtual ~CSimpleMsgBoxClassFactory();
// IUnknown方法
ULONG AddRef();
ULONG Release();
HRESULT QueryInterface( REFIID riid, void** ppv );
// IClassFactory方法
HRESULT CreateInstance( IUnknown* pUnkOuter, REFIID riid, void** ppv );
HRESULT LockServer( BOOL fLock );
protected:
ULONG m_uRefCount;
};
构造函数、析构函数和IUnknown方法都和前面例子中的一样,不同的只有IClassFactory的方法,LockServer(),看起来相当更简单:
HRESULT CSimpleMsgBoxClassFactory::LockServer ( BOOL fLock )
{
fLock ? g_uDllLockCount++ : g_uDllLockCount--;