Ядро управляет загрузкой библиотек алгоритмов, созданием алгоритмов и поздним связыванием методов с алгоритмами.

Ядро позволяет загрузить любое количество библиотек. Каждая библиотека предоставляет компонент с интерфейсом ImaLibrary, способный создавать определители методов — компоненты с интерфейсом ImaMethodDef.

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

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

Управляющее ядро поддерживает интерфейс ImaKernel со следующими функциями.



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 всегда