Ядро позволяет загрузить любое количество библиотек. Каждая библиотека предоставляет компонент с интерфейсом 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, посылающий сообщение об ошибке. Его тип будет записан в поток. Может быть NULLecode код ошибки. В отладочный поток записывается краткое описание кода ошибки
message строка с пояснением ошибки. Может быть NULL
Возвращаемое значение:
=ecode для того, чтобы можно было написать, например,return Kernel->LogError(this,MA_ERR_какая-то,L"Что-то там");
HRESULT LogMessage([in] IPersist* sender, [in,string] maString message)Функции записывают в отладочный поток информационное сообщение вместе со сведениями об объекте, пославшем его (параметр sender).
Параметры:
sender компонент maCom, посылающий сообщение об ошибке. Его тип будет записан в поток. Может быть NULLmessage строка с пояснением ошибки. Может быть 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 всегда