Ядро управляет загрузкой библиотек алгоритмов, созданием алгоритмов и поздним связыванием методов с алгоритмами.
Ядро позволяет загрузить любое количество библиотек. Каждая библиотека предоставляет компонент с интерфейсом ImaLibrary, способный создавать определители методов — компоненты с интерфейсом ImaMethodDef.
Ядро позволяет создать алгоритм с заданным именем. При этом создаются все методы данного алгоритма. Для создания методов ядро просматривает список всех загруженных библиотек и для каждой библиотеки вызывает функцию CreateMethod столько раз, сколько методов определяет данная библиотека для алгоритма с указанным именем. Библиотеки, обрабатываемые позже, могут добавлять или переопределять методы, созданные предыдущими библиотеками. Поэтому последовательность загрузки библиотек может повлиять на состав и порядок следования методов в алгоритме. Чаще всего все методы одного алгоритма определяются в какой-то одной библиотеке.
Ядро предоставляет также возможность определять и переопределять поток вывода отладочной информации, по умолчанию наследуемый всеми создаваемыми алгоритмами.
Управляющее ядро поддерживает интерфейс ImaKernel со следующими функциями.

- LoadLibraryByName ([in,string] maString clsname)
- LoadLibraryByClsid ([in,string] maString clsid)
- RegisterLibrary([in] ImaLibrary* lib)
- UnloadLibraries()
- CreateAlgorithm ([in,string] maString name,[out,retval] ImaAlgorithm** algor)
- OpenLogFile([in,string] maString name)
- SetDebugStream ([in] ImaStream* debug)
- GetDebugStream ([out,retval] ImaStream** debug)
- SetDebugLevel([in] int level)
- GetDebugLevel([out,retval] int* level)
- LogError([in] IPersist* sender,[in] ecode, [in] maString message)
- LogMessage([in] IPersist* sender,
- Log([in] maString message)
- GetLastErrorString([out,retval] maString* errorStr)
- LogMemoryReport()
- LogROT()
- Progress([in] double percent, [in,string] maString message)
- SetProgressHandler([in] ImaProgressHandler* handler)
- SetMinProgressStep([in] double minProgressStep)

    HRESULT LoadLibraryByName ([in,string] maString clsname)
    HRESULT LoadLibraryByClsid ([in,string] maString clsid)

Функции загружают и подключают библиотеку алгоритмов, предварительно зарегистрированную в реестре как COM-класс. В зависимости от выбранной функции библиотека ищется, соответственно по имени класса библиотеки clsname, либо по идентификатору класса библиотеки clsid.

Параметры:

clsname имя библиотеки
clsid ClassID библиотеки (в виде текстовой строки)

Возвращаемое значение:

MA_NOERROR при отсутствии ошибок
MA_ERR_NOTFOUND, если такая библиотека не зарегистрирована в реестре

    HRESULT RegisterLibrary([in] ImaLibrary* lib)

Функция подключает предварительно загруженную библиотеку методов. При таком способе подключения библиотека не обязана быть зарегистрированной в реестре.

Параметры:

lib Указатель на библиотеку

Возвращаемое значение:

MA_NOERROR при отсутствии ошибок
MA_ERR_BAD_PARAM, если lib==NULL

    HRESULT UnloadLibraries()

Функция выгружает из памяти все загруженные библиотеки. Вызов этой функции необходим по окончании работы для корректного удаления ядра системы.

Возвращаемое значение:

MA_NOERROR всегда

    HRESULT CreateAlgorithm  ([in,string] maString name,
    		[out,retval] ImaAlgorithm** algor)

Функция создает алгоритм с именем name и помещает указатель на интерфейс созданного алгоритма в algor. Создается дерево алгоритма, содержащее поддерево параметров Param и поддеревья для каждого из методов алгоритма с пустыми аргументами.

Параметры:

name имя создаваемого алгоритма
algor указатель на возвращаемый алгоритм

Возвращаемое значение:

MA_NOERROR при отсутствии ошибок
MA_ERR_BAD_PARAM, если name или algor равны NULL
MA_ERR_INVALIDDEF, если один из полученных определителей метода возвратил неправильное описание метода.

    HRESULT OpenLogFile([in,string] maString name)

Функция открывает текстовый файл, предназначенный для записи сообщений об ошибках (лог-файл). Если файл с именем name не существует, то он создается; если существует, то новые сообщения дописываются в конец. Рекомендуется вызывать эту функцию сразу после создания ядра.

Параметры:

name имя лог-файла

Возвращаемое значение:

MA_NOERROR при отсутствии ошибок
MA_ERR_IOPERM если файл не удалось создать или открыть

    HRESULT SetDebugStream ([in] ImaStream* debug)

Функция устанавливает поток вывода, в который по умолчанию будет записываться отладочная информация. При создании алгоритмов отладочный поток будет автоматически заноситься в параметр алгоритма Debug. Если указатель debug нулевой, вывод отладочной информации будет игнорироваться.

Параметры:

debug поток вывода

Возвращаемое значение:

MA_NOERROR при отсутствии ошибок
MA_ERR_BAD_PARAM если debug==NULL
MA_ERR_IOPERM если поток — только для чтения

    HRESULT GetDebugStream ([out,retval] ImaStream** debug)

Функция возвращает текущий отладочный поток вывода.

Параметры:

debug указатель на возвращаемый поток. Может быть NULL

Возвращаемое значение:

MA_NOERROR при отсутствии ошибок
MA_ERR_BAD_PARAM если debug==NULL

    HRESULT SetDebugLevel([in] int level)

Функция используется для установки режима вывода отладочных сообщений. Подробнее см. здесь.

Параметры:

level режим вывода отладочных сообщений

Возвращаемое значение:

MA_NOERROR всегда

    HRESULT GetDebugLevel([out,retval] int* level)

Функция используется для получения теущего режима вывода отладочных сообщений. Подробнее см. здесь.

Параметры:

level указатель на возвращаемый режим вывода отладочных сообщений

Возвращаемое значение:

MA_NOERROR при отсутствии ошибок
MA_ERR_BAD_PARAM если plevel==NULL

    HRESULT LogError([in] IPersist* sender,
    	[in] HRESULT ecode, [in] maString message)

Функция записывает в отладочный поток сообщение об ошибке вместе со сведениями об объекте, пославшем его (параметр sender).

Параметры:

sender компонент maCom, посылающий сообщение об ошибке. Его тип будет записан в поток. Может быть NULL
ecode код ошибки. В отладочный поток записывается краткое описание кода ошибки
message строка с пояснением ошибки. Может быть NULL

Возвращаемое значение:

=ecode для того, чтобы можно было написать, например,

     return Kernel->LogError(this,MA_ERR_какая-то,L"Что-то там");

    HRESULT LogMessage([in] IPersist* sender,
            [in,string] maString message)

Функции записывают в отладочный поток информационное сообщение вместе со сведениями об объекте, пославшем его (параметр sender).

Параметры:

sender компонент maCom, посылающий сообщение об ошибке. Его тип будет записан в поток. Может быть NULL
message строка с пояснением ошибки. Может быть NULL

Возвращаемое значение:

MA_NOERROR всегда

    HRESULT Log([in] maString message)

Функция записывает в отладочный поток строку message. Эквивалентна вызову функции WriteStr(message) отладочного потока.

Параметры:

message строка с пояснением ошибки

Возвращаемое значение:

MA_NOERROR всегда

    HRESULT GetLastErrorString([out,retval] maString* errorStr)

Функция возвращает последнее полученное со времени предыдущего вызова сообщение об ошибке.

Параметры:

errorStr Указатель на возвращаемую строку

Возвращаемое значение:

MA_NOERROR при отсутствии ошибок
MA_ERR_BAD_PARAM если errorStr==NULL

    HRESULT LogMemoryReport()

Функция записывает в отладочный поток сведения о расходе памяти.

Возвращаемое значение:

MA_NOERROR всегда

    HRESULT LogROT()

Функция записывает в отладочный поток список всех объектов в системе maCom на момент вызова. Если DebugLevel установлен в MA_DEBUG_NONE, то запись в отладочный поток не выполняется.

Возвращаемое значение:

MA_NOERROR всегда

    HRESULT Progress([in] double percent, [in,string] maString message)

Функция посылает ядру сообщение о текущем состоянии вычислений. Параметр message содержит строковое сообщение о текущем этапе вычислений. Как правило, функция Progress вызывается внутри методов.

Параметры:

percent число от 0 до 1, показывающая оценку доли выполненной работы в процентах.
message содержит сообщение о текущем этапе вычислений.

Возвращаемое значение:

MA_NOERROR если вычисления могут быть продолжены
MA_ERR_INTERRUPT если пользователь или ядро требует прервать операцию. В этом случае метод должен корректно завершить вычисления и вернуть MA_ERR_INTERRUPT.

    HRESULT SetProgressHandler([in] ImaProgressHandler* handler)

Функция устанавливает обработчик сообщений,поступающих от функции Progress. Обработчик должен быть компонентом с интерфейсом ImaProgressHandler.

Параметры:

handler обработчик сообщений. Установите равным NULL, чтобы отключить обработку сообщений.

Возвращаемое значение:

MA_NOERROR всегда

    HRESULT SetMinProgressStep([in] double minProgressStep)

Функция позволяет уменьшить число вызовов обработчика сообщений. После первого обращения к функции Progress все последующие вызовы с тем же параметром message и параметрром percent, отличающимся от первого вызова меньше, чем на minProgressStep, будут игнорироваться.

Параметры:

minProgressStep Минимальный шаг между параметрами percent в двух последовательных вызовах обработчика сообщений

Возвращаемое значение:

MA_NOERROR всегда