我有一个 COM 功能:
GetData(SAFEARRAY ** pRetVal)
并遵循遗留代码:
CComSafeArray<double> saDataArray;
hr = pmyInterface->GetData(&saDataArray.m_psa);
SafeArrayLock(saDataArray);
我怀疑手动管理锁是否好。m_psa
当返回为NULL
by时,该代码会崩溃GetData
吗?
下面的代码怎么样?那个更好吗?
LPSAFEARRAY psa;
CComSafeArray<double> saDataArray;
hr = pmyInterface->GetData(&psa);
saDataArray.Attach(psa);
编辑:
我测试了上面的两个代码。有一个区别。如果GetData
返回NULL
,则直接Attach
不NULL
检查将调用异常。第一个版本将返回一个E_INVALIDARG
. 我的问题仍然存在,您是否更喜欢更高版本,因为它使用 SafeArray 对象来维护计数,而不是混合它?
EDIT2:
如果出于某种原因我选择了第一个版本,可以忽略E_INVALIDARG
返回值吗?当某些代码稍后使用它时,这会有什么副作用saDataArray
吗?