1. C++ / Говнокод #10624

    −33

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 08 Июня 2012

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

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

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