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