手机版

COM编程入门(15)

发布时间:2021-06-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文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)