blob: 5a4371de513b41f773572d0378e5477c3042496a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#include "precomp.h"
#pragma hdrstop
HRESULT CRadioInstanceCollection_CreateInstance(
_In_ DWORD cInstances,
_In_reads_(cInstances) IRadioInstance **rgpIRadioInstance,
_COM_Outptr_ IRadioInstanceCollection **ppInstanceCollection)
{
return CRadioInstanceCollection::CreateInstance(cInstances, rgpIRadioInstance, ppInstanceCollection);
}
void CRadioInstanceCollection::FinalRelease()
{
POSITION p;
while (nullptr != (p = _listRadioInstances.GetHeadPosition()))
{
IRadioInstance *pRadioInstance = _listRadioInstances.GetAt(p);
pRadioInstance->Release();
_listRadioInstances.SetAt(p, nullptr);
_listRadioInstances.RemoveHeadNoReturn();
}
}
// static
HRESULT CRadioInstanceCollection::CreateInstance(
_In_ DWORD cInstances,
_In_reads_(cInstances) IRadioInstance **rgpIRadioInstance,
_COM_Outptr_ IRadioInstanceCollection **ppInstanceCollection)
{
HRESULT hr;
CComObject<CRadioInstanceCollection> *pInstanceCollection;
CComPtr<IRadioInstanceCollection> spInstanceCollection;
*ppInstanceCollection = nullptr;
hr = CComObject<CRadioInstanceCollection>::CreateInstance(&pInstanceCollection);
if (SUCCEEDED(hr) && (pInstanceCollection != nullptr))
{
hr = pInstanceCollection->QueryInterface(IID_PPV_ARGS(&spInstanceCollection));
}
if (SUCCEEDED(hr) && (pInstanceCollection != nullptr))
{
for (DWORD dwIndex = 0; dwIndex < cInstances; dwIndex++)
{
_ATLTRY
{
pInstanceCollection->_listRadioInstances.AddTail(rgpIRadioInstance[dwIndex]);
rgpIRadioInstance[dwIndex]->AddRef();
}
_ATLCATCH(e)
{
hr = e;
break;
}
}
}
if (SUCCEEDED(hr))
{
*ppInstanceCollection = spInstanceCollection.Detach();
}
return hr;
}
IFACEMETHODIMP CRadioInstanceCollection::GetCount(_Out_ UINT32 *pcInstance)
{
if (nullptr == pcInstance)
{
return E_INVALIDARG;
}
*pcInstance = static_cast<UINT32>(_listRadioInstances.GetCount());
return S_OK;
}
IFACEMETHODIMP CRadioInstanceCollection::GetAt(_In_ UINT32 uIndex, _COM_Outptr_ IRadioInstance **ppRadioInstance)
{
if (nullptr == ppRadioInstance)
{
return E_INVALIDARG;
}
HRESULT hr;
*ppRadioInstance = nullptr;
POSITION p = _listRadioInstances.FindIndex(uIndex);
*ppRadioInstance = _listRadioInstances.GetAt(p);
if (nullptr != *ppRadioInstance)
{
(*ppRadioInstance)->AddRef();
hr = S_OK;
}
else
{
hr = E_FAIL;
}
return hr;
}
|