На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Нулевое значение из функции mapDistance

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Нулевое значение из функции mapDistance, mapDistance функция mapapi, GIS ToolKit 14
 
Доброго времени суток!
Суть проблемы - при передаче параметров типа (см ниже) функция отдает 0.
Компоненты и MAPAPI-вызовы в одной программе использую. Библиотека ocx в реестре есть.
Версия GTK Active - v.14.0.6.0 , версия библиотеки gis64acces.dll  - 14.3.3.1. Приложение .Net. Язык с++/cli.

Код
struct  DOUBLEPOINT : DOUBLEPOINTBASE// КООРДИНАТЫ ТОЧКИ (ПЛАВАЮЩАЯ МЕТРИКА)
   {
      double x,y;
      //const double M_PI = 3.1415926535897932;
      DOUBLEPOINT(double xx, double yy) { x = xx; y = yy; }
      DOUBLEPOINT(double value) { x = value; y = value; }
      DOUBLEPOINT() { x = 0; y = 0; }

      // Перевести из градусов в радианы
      void ToRadian()
      {
         x *= 3.1415926535897932 / 180.;
         y *= 3.1415926535897932 / 180.;
      }

      // Перевести из радианов в градусы
      void ToDegree()
      {
         x *= 180. / 3.1415926535897932;
         y *= 180. / 3.1415926535897932;
      }

      DOUBLEPOINT& operator = (const DOUBLEPOINT& dpoint) { x = dpoint.x; y = dpoint.y; return *this; }
      DOUBLEPOINT& operator = (double value) { x = value; y = value; return *this; }
   };
   DOUBLEPOINT *dPOINT = new DOUBLEPOINT;
   DOUBLEPOINT *dPOINT1 = new DOUBLEPOINT;
Код
[DllImport("gis32acces.dll", EntryPoint = "mapDistance", CharSet = CharSet::Ansi, ExactSpelling = true, CallingConvention = CallingConvention::StdCall)]
      static double mapDistance(DOUBLEPOINT *dPOINT, DOUBLEPOINT *dPOINT1);
Код
if (distanceShot->Checked == true)
   {
      if (points == 0)
         // первая точка
      {
         MapPoint->GetPoint(dPOINT->x, dPOINT->y);
         points = 1;

      }
      else
         // вторая точка
      {
         MapPoint->GetPoint(dPOINT1->x, dPOINT1->y);
         double distance;
         distance = mapDistance(dPOINT, dPOINT1); //содержимое dPOINT показано на скриншоте отладчика
         distanceMeter->Text = Convert::ToString(distance) + " м";
         distanceShot->Checked = false;
         points = 0;
                }
         }

Дополнительно, могу сказать, что до этой проблемы боролся с несовпадением сигнатур в исполняемом и неуправляемом коде.
В С++/Сli воспользоваться штатным описанием функции из mapapi и maptype я не могу, просто не умею, но т.к. другие неуправляемые функции в моей программе работают - еще и не вижу смысла.

Вопрос, почему 0, где ошибка? Даю метры на плоскости (MapPoint PlaceOut = PP_PLANE)  
scr1.png (21.43 КБ)
 
При вызове mapDistance(dPOINT, dPOINT1), наверное, есть смысл передать адрес переменных.
 
Цитата
Andrey Gheleznyakov написал:
При вызове mapDistance(dPOINT, dPOINT1), наверное, есть смысл передать адрес переменных
На скриншоте видно, что эти две переменные в себе хранят адрес, по которому, в скобках фигурных, лежат данные точек. Это если я правильно понимаю.
Если нет - тогда как это сделать?
 
Да, действительно, это уже адреса.
Для эксперимента, попробуйте объявить структуру DOUBLEPOINT, в которой будут только две переменные x, y.
 
Цитата
Andrey Gheleznyakov написал:
Да, действительно, это уже адреса.
Для эксперимента, попробуйте объявить структуру DOUBLEPOINT, в которой будут только две переменные x, y
Отчет такой, при одновременном отключении базовой структуры : DOUBLEPOINTBASE от DOUBLEPOINT  и удалении всего, кроме двух переменных (xy), из структуры DOUBLEPOINT, добился результата - функция возвращает значение!!!
Видимо из указателя на структуру в функцию приходило много лишнего от базовой структуры.
Спасибо
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности