com中的Release()函数

Release() function in COM

本文关键字:函数 Release 中的 com      更新时间:2023-10-16

以下是C 程序的主要方法。

int main(){
    HRESULT hr = S_OK;
    IDataCollectorSet* pdcs = NULL;
    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    hr = CreateDCS(pdcs);
    if (FAILED(hr))
    {
        wprintf(L"CreateDCS failed.n");
        goto cleanup;
    }
    hr = AddDataCollector(pdcs);
    if (FAILED(hr))
    {
        wprintf(L"AddDataCollector failed.n");
        goto cleanup;
    }
    hr = SaveDCS(pdcs);
    if (FAILED(hr))
    {
        wprintf(L"SaveDCS failed.n");
        goto cleanup;
    }
    hr = pdcs->Start(VARIANT_TRUE);
    if (FAILED(hr))
    {
        wprintf(L"pdcs->Start failed.n");
        goto cleanup;
    }
    getchar();
cleanup:
    if (pdcs)
        pdcs->Release();
    CoUninitialize();

}

我不明白"清理"标签中的" Release()"功能所做的。如果可以将Release()函数称为 *PDC,是否应该在IdataCollectorset类中声明它?我在其文档中找不到任何定义为" Release()"的函数。

在哪里声明,此功能的目的是什么?

注意:随附的标头文件是

#include <windows.h>
#include <stdio.h>
#include <comutil.h>
#include <pla.h>

您使用的是com对象,而com对象的内存管理是合作的事件。

作为com对象的comsumer,当您完成它后,告诉com对象是您的工作。您可以致电Release来做到这一点。

在COM对象内部,它可以计算有多少用户对其进行引用。通过调用AddRef来增加参考,并通过调用Release减少。当参考计数达到零时,对象知道没有其他人在引用它并清理其内存。这通常是由Release方法中delete this的调用来完成的。

必须在正确的位置调用Release,否则您将通过未破坏的对象泄漏内存。与其使用RAW COM指针,最好使用智能指针(例如CCOMPTR),该指针在对象脱离范围时会自动调用Release,并且当您将对象传递到周围时会调用AddRef

版本是iunknown com接口的一种方法,任何com对象都会实现。

其目的是"减少对象上接口的参考计数"。当参考计数器下降到零时,IUnknown::Release()的实现必须摧毁对象。

此版本来自iunknown:

IUnknown::Release

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682317(v=vs.85)9.aspx

com接口从中继承。调用释放降低com对象的参考计数,最终对其进行真实。

很难不知道IDataCollectorSet,但我想它可以使此类的某些摘要。