com中的Release()函数
Release() function in COM
以下是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
,但我想它可以使此类的某些摘要。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- Release() 和析构函数之间的区别?
- 从动态库中加载FORTRAN函数:Debug vs Release
- com中的Release()函数
- 强制转换函数指针Release()的正确方法
- unique_ptr::release()是否调用析构函数
- 在调用COM Release()函数后,指针是否被设置为空?