Расширение возможностей стартера приложений

  !   Данная информация предназначена только только для IT-специалистов по системной интеграции модулей БИОСОФТ-М. (см. Руководства пользователя к программным продуктам)
Вариант компиляции отдельного проекта стартера

Это никто не отменял. Гибкость такого стартера максимальная. Недостатки:

  • необходимость поддерживать и перекомпилировать лишний мелкий проект,
  • не основанный на Islibа на чем то не портабельном,
  • дублирующий функциональность стандартного стартера AutoloadDll,
  • если стартер не грузит DLL непосредственно, чтобы избежать зависимостей от внутренней логики импортирования вызова, а запускает основной стартер отдельным процессом, то он более развиваем и живуч, но межпроцессная коммуникация может усложнится из за лишней прослойки еще одного процесса.
Плугины к AutoloadDll
Создание экстеншена к стартеру

Для того чтобы добавить к стартеру проекта дополнительную логику нужно создать в этом проекте файл

    Packages/_main_/ExtendAutoloadDll.h

Этот файл заменит стандартную заглушку. Он как минимум должен определять следующий колбак класс:

// ExtendAutoloadDll.h
 
// NOTE: AutoloadDll does not use Islib! It only includes simple replacement libs.
 
class CAutoloadDllHookReplacement : public CAutoloadDllHookStandard
{
public:
 
};
Переопределяемые функции

Базовый класс предлагает переопределить следующие методы:

OverrideSearchModuleDll()
    // Add your search logic before or after calling the base class impl
    virtual HMODULE OverrideSearchModuleDll(
            path pathExe);

Дополняет или заменяет логику поиска модуля. См. пример в Stabip для Заставка для CD Stabip.

Контроль версий

Для того чтобы убедится, что проект запущен специально для него адаптированным стартером можно проверить сигнатуру, которую передает стартер в DLL. Для этого экстендер переопределяет #define AUTOLOAD_SIGNATURE а проект проверяет его. Как это делает Stabip:

// ExtendAutoloadDll.h
 
#include "Packages\_shared_\StabipSharedConst.h"
 
#undef AUTOLOAD_SIGNATURE
#define AUTOLOAD_SIGNATURE C_sStabipAutoloadSignature
void CStabipProject::OnInitProject()
{
    //
    // Common Initialization ('InitInstance' alike)
    //  (after all system libraries are ready)
    //
 
//VL: 2010-09-13
    // check the starter linkage
    if (CAppProcessIfaceGp::GGetThisAppProcess()->
            x_rAppStarter->
                x_sAutoloadDllSignature.Get().
                    FindPos(
                        C_sStabipAutoloadSignature)
            <
            0)
    {
        ask("Stabip starter version mismatch. /VL:STSI/").DeferToIdle("");
    }
//VL.
Сложности

Стартер вместо полноценного Islib использует простые библиотеки simple lib, эмулирующие ряд основных классов. Там нет Cx. В остальном программирование происходит на низком уровне на С++. Со всеми вытекающими. Так что не надо особенно разгонятся с выносом туда функций. Все сложные вещи нужно выносить в более безопасные Islib проекты.

Отладка

Для отладки одного или нескольких стартеров AutoloadDll-проект надо перекомпилировать всегда полностью. Для ускорения можно выбрать часть проектов раскоментировав тут:

rule MakeAllStarters
{
    local aProjectList =
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ".............."
        ;
 
#//VL: 2010-09-04
    #// debug a single project/group
    #aProjectList =
    #    "Stabip"
    #    "Calfox"
    #    ;
#//VL.
 
    local sIterProject ;
    for sIterProject in $(aProjectList)
    {
        MakeNextStarter $(sIterProject) ;
    }
}
Подробности

Jam направляет приоритетно искать исходники стартера в папках проекта:

#//VL: 2010-09-03
        #// An ability to include from module source
        "/I"$(sProjectRootFolder)
#//VL.