Кресты / Говнокод #10624 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 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 Steve_Brown, (Updated )

Комментарии (1) RSS

  • - Хорошо, Вам решать. Но я не прощу себе, если по моей вине случится что-нибудь плохое.
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8