COM编程入门(15)

时间:2025-04-06

COM编程入门,十分浅显易懂

务器也是被动的,因为不管怎样它们毕尽还是DLL,但COM库提供了一种机制,它允许某个服务器命令COM卸载它。这是通过输出函数 DllCanUnloadNow()实现的。这个函数的原型如下:

HRESULT DllCanUnloadNow();

当客户应用程序调用COM API CoFreeUnusedLibraries()时,通常出于其空闲处理期间,COM库遍历这个客户端应用已加载所有的DLL服务器并通过调用它的 DllCanUnloadNow()函数查询每一个服务器。另一方面,如果某个服务器确定它不再需要驻留内存,它可以返回S_OK让COM将它卸载。服务 器通过简单的引用计数来确定它是否能被卸载。下面是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; // 对象的引用计数

};

构造器和析构器

COM编程入门(15).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219