Des*_*PRG 1 c++ windows com visual-studio-2010 visual-c++
以下是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();
}
Run Code Online (Sandbox Code Playgroud)
我不明白"清理"标签中的"Release()"功能是做什么的.如果可以为*pdcs调用Release()函数,不应该在IDataCollectorSet类下声明它吗?我在他们的文档中找不到任何定义为"Release()"的函数.
它在哪里宣布,这个功能的目的是什么?
注意:包含的头文件是
#include <windows.h>
#include <stdio.h>
#include <comutil.h>
#include <pla.h>
Run Code Online (Sandbox Code Playgroud)
您正在使用COM对象,COM对象的内存管理是一种合作事件.
作为COM对象的comsumer,完成它后告诉COM对象是你的工作.你通过电话来做到这一点Release.
在COM对象内部,它会保留有多少用户对其进行引用的计数.通过调用增加引用AddRef,并通过调用减少引用Release.当引用计数变为零时,对象知道没有其他人正在引用它并将清理其内存.这通常通过delete this在Release方法中调用来完成.
你必须Release在正确的地方打电话,否则你会通过未被破坏的物品泄漏记忆.不使用原始COM指针,最好使用CComPtr等智能指针,Release当对象超出范围时会自动调用,并AddRef在传递对象时调用.
| 归档时间: |
|
| 查看次数: |
3533 次 |
| 最近记录: |