我有一個COM功能:這是CComSafeArray的使用不好嗎?
GetData(SAFEARRAY ** pRetVal)
及以下的遺留代碼:
CComSafeArray<double> saDataArray;
hr = pmyInterface->GetData(&saDataArray.m_psa);
SafeArrayLock(saDataArray);
我懷疑,如果這是很好的手動管理鎖。當m_psa
被返回爲NULL
GetData
時,該代碼是否會崩潰?
下面的代碼如何?那個更好嗎?
LPSAFEARRAY psa;
CComSafeArray<double> saDataArray;
hr = pmyInterface->GetData(&psa);
saDataArray.Attach(psa);
編輯: 我測試的兩種代碼的上方。有一個區別。如果GetData
返回NULL
,直接Attach
它沒有NULL
檢查將調用一個異常。第一個版本將返回E_INVALIDARG
。我的問題仍然存在,你更喜歡後來的版本,因爲它使用SafeArray對象來維持計數,而不是混合它?
EDIT2: 如果出於某種原因,我選擇的第一個版本,是沒關係忽略E_INVALIDARG
返回值?當某些代碼稍後使用saDataArray
時會有什麼副作用嗎?
ATL庫或MS工具中的任何其他位置沒有'SafeArray'類型。你可能意思是'LPSAFEARRAY'。此外,ATL :: CComSafeArray提供了一種獲取out-val用法的內部指針地址的方法。 [CComSafeArray :: GetSafeArrayPtr()](http://msdn.microsoft.com/en-us/library/1s10dhw5(v = vs.71).aspx) – WhozCraig 2013-04-22 09:33:06
我不知道它是否可能是重複的[這個問題](http://stackoverflow.com/questions/1778491/how-does-one-return-a-local-ccomsafearray-to-a-lpsafearray-output-parameter)... – 2013-04-22 09:41:36
謝謝,這是正確的 – Archer 2013-04-22 09:43:34