Разработки          Услуги          О компании          Контакты  

Материал из биософт-м

Перейти к: навигация, поиск

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

По умолчанию все стартеры компилируются одинаковыми и берут только название и икону от проекта своего главного модуля. Но иногда, как для Заставка для CD Stabip нужно добавить специфичную для приложения логику в стартер.

Вариант компиляции отдельного проекта стартера

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

  • необходимость поддерживать и перекомпилировать лишний мелкий проект,
  • не основанный на 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-проект надо перекомпилировать всегда полностью. Для ускорения можно выбрать часть проектов раскоментировав тут:

+ Детали

Подробности

+ Детали
www.biosoft-m.ru



Просмотры
Личные инструменты