Общие сведения

Печать Предыдущая страница Стартовая страница Следующая страница

Управляющая оболочка программы ГИС Панорама позволяет вызывать отдельные задачи, реализованные пользователем, для работы с электронными картами.

Существует два вида таких задач.

Первый вид - это задачи, выполняемые в потоковом режиме без интерактивной работы оператора (пользователя) с изображением электронной карты. Например: конвертирование, трансформирование, сортировка, обновление и другие виды обработки данных.

Второй вид - это интерактивные задачи. Например: редактирование, решение расчетных задач, построение отчетов, работа с базами данных и так д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.