Общие сведения |
Управляющая оболочка программы ГИС Панорама позволяет вызывать отдельные задачи, реализованные пользователем, для работы с электронными картами. Существует два вида таких задач. Первый вид - это задачи, выполняемые в потоковом режиме без интерактивной работы оператора (пользователя) с изображением электронной карты. Например: конвертирование, трансформирование, сортировка, обновление и другие виды обработки данных. Второй вид - это интерактивные задачи. Например: редактирование, решение расчетных задач, построение отчетов, работа с базами данных и так дaлее. Прикладные задачи должны быть в виде 32-ух разрядных модулей формата DLL для программ x32. Для использования функций доступа к электронным картам применяется библиотека MAPACCES.DLL. Для программ x64 прикладные задачи должны быть в виде 64-х разрядных модулей формата DLL. Для использования функций доступа к электронным картам применяется библиотека MAPACCES64.DLL. Для вызова задач в модулях должны быть объявлены две стандартные функции. Все задачи должны иметь функцию вида:
extern "C" { long int _ export WINAPI GetInterfaceVersion() { return MAPACCESSVERSION; } } Если прикладная задача разрабатывается на Visual C++, то вместо "_export" необходимо записать "__declspec(dllexport)". При написании приложения в Delphi может применяться следующая запись: procedure GetInterfaceVersion; stdcall; export; begin ... end; exports GetInterfaceVersion; Эта функция всегда вызывается перед запуском задачи для сравнения версии библиотеки MAPACCESS, используемой при написании задачи, и версии библиотеки, реально установленной в системе. Если версии различаются - задача не будет выполняться. В этом случае необходимо перетранслировать приложение. Переменная MAPACCESSVERSION объявлена в файле mapapi.h. Кроме этой функции задачи первого вида должны иметь функцию вида:
extern "C" { long int _export WINAPI CallMapFunction(HMAP hmap, TASKPARM * parm); { ... } } Переменная hmap типа HMAP содержит указатель на класс открытых данных документа карты. Структура TASKPARM описана в файле MAPTYPE.H. typedef struct TASKPARM // ПАРАМЕТРЫ ПРИКЛАДНОЙ ЗАДАЧИ { long int Language; // Код языка диалогов (1 - ENGLISH, 2 - RUSSIAN, ...) #if defined(_M_X64) || defined(BUILD_DLL64) #ifdef WIN32API long int Zero; // Выравнивание указателей #endif #endif HINSTANCE Resource; // Модуль ресурсов приложения const char* HelpName; // Полное имя файла справки ".chm" const char* IniName; // Полное имя файла ".ini" приложения const char* PathShell; // Каталог приложения (exe,dll,...) const char* ApplicationName; // Имя приложения #ifdef WIN32API HWND Handle; // Идентификатор главного окна приложения #else MSGHANDLER Handle;// Идентификатор обработчика команд главного окна приложения #endif } TASKPARM;
Задачи второго типа могут разрабатываться с помощью Embarcadero C++Builder XE* или Microsoft Visual C++, так как они используют механизм экспорта классов языка С++. Но в ходе их выполнения могут использоваться компоненты, разработанные с помощью других языков программирования. Для разработки прикладных пользовательских задач в системе ГИС Панорама, работающих в интерактивном режиме, необходимо применение программного интерфейса PANAPI. Кроме функции "GetInterfaceVersion()" задачи второго вида должны содержать функцию вида: extern "C" { HMAPTASK WINAPI __export CreatePanTask(HMAPDOC HMapDoc, TASKPARM * parm, const char * pathname) { TPanTask * task; try { task = new TUserTask(HMapDoc,parm,pathname); } catch(...) { task = 0; } if (task == 0) return 0; if (task->GetTaskIdent() == 0) { delete task; return 0; } return task->GetTaskIdent(); }
Класс TPanTask описан в файле \pantask\pantask.h. Класс TUserTask должен быть производным от класса TPanTask. В качестве примера задач второго типа могут использоваться исходные тексты задачи редактирования растра (проект SDK12\rswedit\rswedit.cbproj для сборки x32 и проект SDK12\rswedit\rswedit64.cbproj для сборки x64) и выполнения печати (проект SDK12\Ready\MapPrint\mapprint.cbproj для сборки x32 и проект SDK12\Ready\MapPrint\mapprint64.cbproj для сборки x64), входящие в состав примеров разработки приложений в ГИС "Панорама" 12.
|