Доброго времени суток!
Суть проблемы - при передаче параметров типа (см ниже) функция отдает 0.
Компоненты и MAPAPI-вызовы в одной программе использую. Библиотека ocx в реестре есть.
Версия GTK Active - v.14.0.6.0 , версия библиотеки gis64acces.dll - 14.3.3.1. Приложение .Net. Язык с++/cli.
Дополнительно, могу сказать, что до этой проблемы боролся с несовпадением сигнатур в исполняемом и неуправляемом коде.
В С++/Сli воспользоваться штатным описанием функции из mapapi и maptype я не могу, просто не умею, но т.к. другие неуправляемые функции в моей программе работают - еще и не вижу смысла.
Вопрос, почему 0, где ошибка? Даю метры на плоскости (MapPoint PlaceOut = PP_PLANE)
Суть проблемы - при передаче параметров типа (см ниже) функция отдает 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)