! | Данная информация предназначена только только для IT-специалистов по системной интеграции модулей БИОСОФТ-М. (см. Руководства пользователя к программным продуктам) |
Это никто не отменял. Гибкость такого стартера максимальная. Недостатки:
Для того чтобы добавить к стартеру проекта дополнительную логику нужно создать в этом проекте файл
Packages/_main_/ExtendAutoloadDll.h
Этот файл заменит стандартную заглушку. Он как минимум должен определять следующий колбак класс:
// ExtendAutoloadDll.h // NOTE: AutoloadDll does not use Islib! It only includes simple replacement libs. class CAutoloadDllHookReplacement : public CAutoloadDllHookStandard { public: };
Базовый класс предлагает переопределить следующие методы:
// 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.