gpt4 book ai didi

c++ - IDispatch::Invoke(DISPATCH_PROPERTYGET) 是否会增加返回的 IDispatch 接口(interface)上的引用计数?

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:22 28 4
gpt4 key购买 nike

我目前正在开发一个 COM 服务器(使用 ATL)供闭源 VB 使用应用。到目前为止一切正常,但我想确保没有泄漏那里...所以我的问题是:

我是否必须在通过以下方式获得的 IDispatch 指针上调用 AddRef 和/或 Release:

VARIANT pVar;
IDispatch->Invoke(dwDispID, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET,
&dispparamsNoArgs, &pVar, NULL, NULL);

最佳答案

如果您的 pVar 持有接口(interface)指针(IUnknown*IDispatch*),您将收到它 AddRef '已经吃饱了。你有责任在完成后进行匹配发布,你通常只是间接地清理变体:通过 VariantClear .

The function clears a VARIANTARG by setting the vt field to VT_EMPTY. The current contents of the VARIANTARG are released first. [...] If the vtfield is VT_DISPATCH, the object is released. [...]

顺便说一句,在ATL中不需要使用Invoke来读取属性。你有现成的好 helper :

CComPtr<IDispatch> pDispatch;
CComVariant vFoo;
HRESULT nFooResult = pDispatch.GetPropertyByName(L"Foo", &vFoo);
CComVariant vBar;
HRESULT nBarResult = pDispatch.GetProperty(DISPID_BAR, &vBar);

包装类负责引用管理。

关于c++ - IDispatch::Invoke(DISPATCH_PROPERTYGET) 是否会增加返回的 IDispatch 接口(interface)上的引用计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089911/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com