Классы-оболочки (wrappers) предоставляют удобный объектно-ориентированный интерфейс для работы с основными компонентами. Они скрывают специфику COM за обычными классами языка C++.
Классы-оболочки очень компактны, обычно они имеют размер одного или двух указателей. Поэтому в функциях можно возвращать сами классы-оболочки, а не ссылки на них, не сильно проигрывая в эффективности.
Для обработки ошибочных ситуаций применяются три механизма, включение которых определяется макросами MA_USE_EXCEPTIONS и MA_CLASS_EXCEPTIONS.

1. (MA_USE_EXCEPTIONS не определен) сохранение кода ошибки в глобальной переменной, из которой его можно прочитать с помощью функции

       HRESULT maGetLastError()

2. (MA_USE_EXCEPTIONS определен, MA_CLASS_EXCEPTIONS не определен) Возбуждение исключений (C++ exceptions) типа int со значением, равным коду ошибки. В примере показано, как можно обрабатывать исключения.

       try{
           CmaIndex sz;
           CmaMatrix X(MA_DOUBLE, sz[168][7]);

           // работа с матрицей

       }catch(int eCode){
           // сюда попадаем, только если произошла ошибка
           printf("Код ошибки= %x\n",eCode);
            //... Другие действия

       }

3. (MA_USE_EXCEPTIONS и MA_CLASS_EXCEPTIONS определены) Возбуждение исключений (C++ exceptions) типа CmaException.

       class CmaException{
       public:
           int maLastError; 	// код ошибки
           char* fileName;     // имя файла, в котором произошла ошибка (maComClasses.h или maComClasses.cpp)
           int lineNo;		// номер строки, в которой произошла ошибка
           CmaException(int m_maLastError,int m_lineNo,char* m_fileName); // копирует свои параметры в поля класса
       };

   В примере показано, как в этом случае обрабатывать исключения.

       try{
           CmaIndex sz;
           CmaMatrix X(MA_DOUBLE, sz[168][7]);

           // работа с матрицей

       }catch(CmaException* E){
           // сюда попадаем, только если произошла ошибка
           printf("Ошибка на строке %d файла <%s> с кодом %x\n",E->lineNo,E->fileName,E->maLastError);
           //... Другие действия

       }

Код ошибки не зависит то механизма обработки ошибок. Этот код приведен в описании функций в разделе Код ошибки.