WEB开发网
开发学院软件开发VC COM编程入门:深入COM服务器 阅读

COM编程入门:深入COM服务器

 2006-07-21 11:44:59 来源:WEB开发网   
核心提示: 服务器通过简单的引用计数来确定它是否能被卸载,下面是DllCanUnloadNow()的实现:extern UINT g_uDllRefCount;// 服务器的引用计数HRESULT DllCanUnloadNow(){return (g_uDllRefCount > 0) ? S

服务器通过简单的引用计数来确定它是否能被卸载。下面是DllCanUnloadNow()的实现:

extern UINT g_uDllRefCount; // 服务器的引用计数
HRESULT DllCanUnloadNow()
{
  return (g_uDllRefCount > 0) ? S_FALSE : S_OK;
}

如何处理引用计数将在下一节涉及到具体代码时讨论。

实现接口,从IUnknown开始

有必要回想一下IUnknown派生的每一个接口。因为IUnknown包含了两个COM对象的基本特性——引用计数和接口查询。当你编写组件对象类时(coclass),还要写一个满足自己需要的IUnknown实现。以实现IUnknown接口的组件对象类为例——下面这个例子可能是你编写的最简单的一个组件对象类。我们将在一个叫做CUnknownImpl的C++类中实现IUnknown。下面是这个类的声明:

class CUnknownImpl : public IUnknown
{
public:
  // 构造函数和析构器
  CUnknownImpl();
  virtual ~CUnknownImpl();
  // IUnknown 方法
  ULONG AddRef();
  ULONG Release)();
  HRESULT QueryInterface( REFIID riid, void** ppv );
protected:
  UINT m_uRefCount; // 对象的引用计数
};

构造器和析构器

构造器和析构器管理服务器的引用计数:

CUnknownImpl::CUnknownImpl()
{
  m_uRefCount = 0;
  g_uDllRefCount++;
}
CUnknownImpl::~CUnknownImpl()
{
  g_uDllRefCount--;
}

当创建新的COM对象时,构造器被调用,它增加服务器的引用计数以保持这个服务器驻留内存。同时它还将对象的引用计数初始化为零。当这个COM对象被摧毁时,它减少服务器的引用计数。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:COM 编程 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接