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

KFF (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » KFF
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 19 20 21 22 23 24 25 26 27 28 29 ... 327 След.
Задачи для ГИС Карта 2011, (состав и комплексация)
 
Здравствуйте господа разработчики !
Вопрос, вот эти 2 задачи входят в комплект поставки или на них требуется особая лицензия?

[IMG]http://delphi-gis.ucoz.ua/Images/ForForum/2015/img017.png[/IMG]
вопрос по mapObjectSetObject
 
[QUOTE]Газонокосильщик пишет:
в данном контексте удалять его должен юзер, его создавший.[/QUOTE]

вот и пришли к консенсусу что если написано:


[QUOTE] // Запросить объект из набора по номеру (начиная с 1)
[B] // Объект HOBJ не нужно создавать !!![/B]
// hobjset - указатель на набора объектов
// number  - номер объекта из набора
// При ошибке возвращает 0

_MAPIMP HOBJ _MAPAPI mapObjectSetObject(HOBJSET hobjset, long int number);[/QUOTE]

значить HOBJ мне возвращает функция mapObjectSetObject [B]return[/B]-ом

и я, как вызвавший её должен сделать у себя вот так
[QUOTE]{
HOBJ hobj = mapObjectSetObject(set, 1);
[B]if (!hobj) mapFreeObject(hobj);[/B]
return;
}[/QUOTE]

но практика показывает что иногда, функции ведут себя вот так:

[IMG]http://s017.radikal.ru/i435/1511/86/7a0fbc1f9883.png[/IMG]
ImportFromAnySxf, ImportFromAnySxf
 
[U]Для информации (всем читающим) .[/U]

Если Вы начинаете использовать новую функцию в своём проекте, допустим [B]ImportFromAnySxf[/B], необходимо найти её в папке Dll с установленным GisToolKit
У меня эта папка размещена по пути
"C:\Program Files (x86)\Borland\Delphi7\Components\GisToolFree11\Dll\"
После поиска ищем [B]одноименную[/B] пару DLL + LIB и прописываем в себе в проекте DLL подключая LIB файл

[IMG]http://s019.radikal.ru/i619/1511/65/690bc32da6ee.png[/IMG]

п.с я ка кначинающий сишник делаю так. пока что проблем типа "Unresolved external symbol...." не имею

Александру (Газонокосильщику) подход правильный или есть нюансы, проконсультируйте как Гуру С++ :)
ImportFromAnySxf, ImportFromAnySxf
 
[B]gisvecex.lib [/B]? :)
вопрос по mapObjectSetObject
 
[QUOTE]Газонокосильщик пишет:
Не буду холивару устраивать. И про языки, и про форум, и на чём ядро написано.[/QUOTE]
а при чём тут холивара  :|
В ядре ГИС вся нумерация начинается с единицы
1. номер саментик for (int i=1; i<=mapObjectAmount(hobj)) номера семантик с 1
2. метрика mapgetPointPlane, mapGetGeoPoint и.т.п первая точка метрики с 1
3. номера значний в семантике с 1
4. номера листов в карте с 1 и так далее и тому подобное
посему цикл который выше не имеет ничего общего к принципам программирования на языках С++ и  Паскале

Александр, вы не ответили на вопрос.
Может ли быть такое завершение функции
[CODE]
HOBJ _stdcall xxx()
{
  HOBj ret = mapCreateSiteObject(map, site)
  return ret;
}
[/CODE]
если да, кто должен контролировать память под [B]ret[/B], тот кто написал фунцию или тот кто вызвал,
при условии что в описании сказано "функция создаёт объект сама !"

Елена, выполнил проверку на 0 - при попытке удалить объект эффект тот же
Изменено: KFF - 03.11.2015 20:31:28
вопрос по mapObjectSetObject
 
Елена, Ваш вариант приемлем и скорее всего будет использован мной .... но есть одно маленькое "НО"
В строчке которая отмечена "выполнить действия с obj2 я делаю осовбождение объекта (до освобождения класса)
и получаю вот такую картину

[IMG]http://s017.radikal.ru/i435/1511/86/7a0fbc1f9883.png[/IMG]

Это нормальное явление ?

---
Александру
>>В Си индексация - с НУЛЯ!!!
И в Си и в Паскале и во всех языках она начинается с нуля, но в контексте этого форума я оперирую не по правилам Си,
а по правилам ядра ГИС у которых нумерация начинается с единицы.  :)
Изменено: KFF - 03.11.2015 10:46:11
вопрос по mapObjectSetObject
 
[QUOTE]Елена Кузнецова пишет:
3. После использования функции mapFreeObjectSet(hObjSet) действия с obj2
должны быть прекращены.[/QUOTE]

Но я ведь их не прекращаю ибо поиск это одна функция, а обработка найденного это вторая функция.
Или вы мне советуете перейти с модульного и ОО программирования на безформенную линейную кашу
которая практиковалась в конце 70-80 гг в Бейсике?

Мало того, я описывал выше, после mapFreeObjectSet значение obj2 вполне корректно и с объектом можно делать всё, кроме mapfreeObject

В связи с тем, что mapFreeObjectSet не удаляет obj2 повторно задаю вопрос - не попахивает ли такой подход в организации функции
банальной утечкой памяти. По сути объект obj2 создаётся внутри  mapObjectSetObject и возвращается return hobj
а кто и как его освобождает вопрос открытый

------------------------------
Вопрос Александру как гуру С++.

Предполагаю что внутри функции mapObjectSetObject приблизительно следующий код (разработчики поправьте если я не прав):

[CODE]HOBJ __stdcall mapObjectSetObject(HOBJSET hObjSet, int number)
{
 if (hObjSet == 0 || number<1 || number>list->count()) return 0;
 ....
 int key = list->Get(number);

 if (key)
 {  // ========== ЭТОТ КУСОК ============
   HOBJ hobj = mapCreateSiteObject(hmap, hsite);
   if (mapSeekSiteObject(hmap, hsite, hobj, key))
      return hobj
 }
}
[/CODE]

Корректно ли написан выделенный кусок кода с точки зрения контроля памяти


[U]Вопрос ЕЛЕНЕ[/U]

что будет если я послушаю Вашего совета и сделаю вот так:
[CODE]
HOBJSET hObjSet = mapCreateObjectSet();
mapBuildObjectSet(hObjSet, hobj);
for (int i = 1; i<= mapObjectSetCount(hObjSet); i++)
{
  obj2 = mapObjectSetObject(hObjSet, i);
  if (refkey != mapObjectKey(obj2))
  {  // объект найден и создан
     использую его семантики
     mapFreeObject(obj2); // удаляю его. по сути он создан mapObjectSetObject
     break;
  }
}
mapFreeObjectSet(hObjSet); <<<< ЕЛЕНА ВЫЛЕТИТ ИЛИ НЕ ВЫЛЕТИТ ?
[/CODE]
вопрос по mapObjectSetObject
 
[QUOTE]Елена Кузнецова пишет:
Обязательного зануления не требуется.[/QUOTE]
Попробуйте повторить эту фразу Олегу Валентиновичу :D

[QUOTE]Обо всем позаботится класс набора объектов.[/QUOTE]
Елена, если Вы посмотрите мой первый пост то тма видно, что класса набора объектов уже нет  в природе, а объект obj2 остался заполненным
По сути стоит задача найти объект в равноправной серии который подходит по параметрам.

Допустим, у меня есть объект "ДОМ" (1) и "Подпись дома" (2). Они связаны через семантику 32803 в которую пишется ключ первого объекта набора, пусть это будет дом (1)

теперь мне нужно найти объект подпись. Если я полезу в семантику 32803 напрямую я найду значение которое ссылается на меня же (на дом).
Чтобы найти все объекты группы и отобрать подпись мне нужно

а) Создать контекст группы
  HOBJSET hObjSet = mapCreateObjectSet(); << СОЗДАЛ

б) Собрать группу
  mapBuildObjectSet(hObjSet, hobj);  << СОБРАЛ hobj это мой обънкт ДОМ

в) пройтись по всем объектам и найти подпись. Зная что у меня 2 объекта, я ищу тот, номер которого не совпадает с (1) - ДОМ  
[CODE] for (int i = 1; i<= mapObjectSetCount(hObjSet); i++)
 {
   obj2 = mapObjectSetObject(hObjSet, i);
   if (refkey != mapObjectKey(obj2)) break;
   obj2 = 0;
 }

г) после поиска освобождаем контекст
 mapFreeObjectSet(hObjSet);

НО !!! obj2 при условии обнаружения второго объекта [B]if (refkey != mapObjectKey(obj2)) break; [/B]
Содержит объект подпись которая доступна после mapFreeObjectSet и аж до конца функции....

С указателя obj2 можно брать семантики, его можно перемещать (менять метрику), изменять, и делать всё что угодно КРОМЕ  :!:

mapFreeObject(obj2) даёт AccessViolation

-----------------
Ещё раз повторяю вопрос, как пользоваться этими функциями и не вызовут ли они  
Out Of Memory при обильном использовании ?
вопрос по mapObjectSetObject
 
[QUOTE]Елена Кузнецова пишет:
Комментарии к функцииmapObjectSetObject(HOBJSET hobjset, long int number)
корректны. За освобождение класса HOBJSET несет ответственность тот, кто
создал его функцией mapCreateObjectSet().[/QUOTE]
Елена, то что нужно освобождать hObjSet функцией mapFreeObjectSet(hObjSet); понятно даже начинающему
Вопрос другой, как освобождается и освобождается ли вообще объект, который получен функцией
[U]obj2 = mapObjectSet[B]Object[/B](hObjSet, i);[/U]
...или просто зануляется как в коде выше ?
вопрос по mapObjectSetObject
 
Здравствуйте господа разработчики !
В описании функции mapObjectSetObject написано

[quote][B]// Объект HOBJ не нужно создавать !!![/B]
// hobjset - указатель на набора объектов
// number  - номер объекта из набора
// При ошибке возвращает 0
_MAPIMP HOBJ _MAPAPI mapObjectSetObject(HOBJSET hobjset, long int number);[/quote]

Вопрос, а его освобождать нужно ? В таком виде:

[code] hobj - подаётся на вход и он связан с другим объектом на карте
int refkey =  (int)mapSemanticCodeDoubleValue(hobj, 32803, 1);
HOBJ obj2 = 0;

if (refkey)
{
   HMAP map  = mapGetObjectDocIdent(hobj);
   HSITE site = mapGetObjectSiteIdent(map, hobj);
   // если мы в главном объекте набора, ищем второй объект
   if (refkey == mapObjectKey(hobj))
   {
       HOBJSET hObjSet = mapCreateObjectSet();
       mapBuildObjectSet(hObjSet, hobj);
       for (int i = 1; i<= mapObjectSetCount(hObjSet); i++)
       {
         obj2 = mapObjectSetObject(hObjSet, i);
         if (refkey != mapObjectKey(obj2)) break;
         obj2 = 0;
       }
       mapFreeObjectSet(hObjSet);
   };
}

[/code]
[b]if (obj2) mapFreeObject(obj2); ???? [/b]
Изменено: KFF - 29.10.2015 15:44:52
Страницы: Пред. 1 ... 19 20 21 22 23 24 25 26 27 28 29 ... 327 След.



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

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