gpt4 book ai didi

c++ - ATL/COM:为什么 CComSafeArray::GetCount() 会为空数组引发异常?

转载 作者:行者123 更新时间:2023-11-30 02:49:27 24 4
gpt4 key购买 nike

我正在使用 ATL CComSafeArray类,但是如果数组为空,GetCount() 似乎会抛出异常,例如这段代码抛出异常:

CComSafeArray<MyStruct> array;
// array.Add(item); // There won't be an exception if I uncomment this line.
array.GetCount();

这是构造函数和 GetCount() 的代码(来自 ATL 源):

CComSafeArray() throw() : m_psa(NULL)
{
}
ULONG GetCount(UINT uDim = 0) const
{
ATLASSUME(m_psa != NULL);
ATLASSERT(uDim < GetDimensions());
LONG lLBound, lUBound;
HRESULT hRes = SafeArrayGetLBound(m_psa, uDim+1, &lLBound);
ATLASSERT(SUCCEEDED(hRes));
if(FAILED(hRes))
AtlThrow(hRes);
hRes = SafeArrayGetUBound(m_psa, uDim+1, &lUBound);
ATLASSERT(SUCCEEDED(hRes));
if(FAILED(hRes))
AtlThrow(hRes);
return (lUBound - lLBound + 1);
}

如您所见,构造函数将 NULL 值赋给 m_psa,并且在 GetCount() 中,这导致 SafeArrayGetLBound() 到返回错误 HRESULT,这会导致调用 AtlThrow()。

但我不明白为什么 GetCount() 在数组为空时会抛出异常。这是预期的行为吗?

最佳答案

您有一个 SAFEARRAY 的未绑定(bind)包装器,而不是一个空数组。

如果你想要一个空的 SAFEARRAY,你可以声明一个:

CComSafeArray<MyStruct> array((ULONG)0);

关于c++ - ATL/COM:为什么 CComSafeArray::GetCount() 会为空数组引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169830/

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