−33
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
CArray <CStyle *, CStyle *> m_aStyles;
...
#define RETURN_TRUE return *bOk = TRUE, S_OK
#define RETURN_FALSE return *bOk = FALSE, S_FALSE
#define RETURN_ERROR(E) \
return LastErrorCode = (ERROR_##E), *bOk = FALSE, S_FALSE
...
// Создание нового стиля (пустого)
STDMETHODIMP CEffector::AddStyle(VARIANT_BOOL *bOk)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
CStyle *pNew = new CStyle;
if (pNew)
{
INT n = m_aStyles.GetSize();
m_aStyles.Add(pNew);
if (m_aStyles.GetSize() <= n)
RETURN_ERROR(MEMORY);
}
else
RETURN_ERROR(MEMORY);
RETURN_TRUE;
}
...
// Получение кода ошибки
STDMETHODIMP CEffector::GetErrorCode(long *p)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
*p = LastErrorCode;
LastErrorCode = ERROR_NONE;
return S_OK;
}
Мой первый COM-объект.
1) Если при успешном возвращении метод должен возвращать S_OK, то при ошибке... S_FALSE, наверное.
2) Только в Дельфи почему-то возвращается не HRESULT, а параметр, помеченный [out]. Поэтому пришлось добавить аргумент *bOk.
3) Интересно, что делает CArray, когда кончается память.
Запостил: Steve_Brown,
08 Июня 2012
NNCYC 25.08.2021 08:27 # 0