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

gisu64vcacces.dll access violation

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 ... 5 6 7 8 9 След.
RSS
[ Закрыто ] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
Кстати, коллеги!
Если собрать MapViewer в DEBUG режиме (тот что лежит тут: http://gisinfo.ru/download?id=20), то при старте он упадет. Хотелось бы в этом тоже разобраться - явный признак наличия проблем.
 
Точнее не при старте, а при попытке открыть карту
 
Цитата
Александр Волков написал:
Если собрать MapViewer в DEBUG режиме (тот что лежит тут:  http://gisinfo.ru/download?id=20) , то при старте он упадет. Хотелось бы в этом тоже разобраться - явный признак наличия проблем.
Вопрос передан специалисту для проверки.

Спасибо.
 
Цитата
Александр Волков написал:
Помимо предыдущего вопроса остался еще один, я о нем уже писал 2 раза, но вы на него ни чего не ответили.
Цитата
15.02.2018 12:08:30
Рендер пирамиды карт стал подтормаживать при переходе на новый масштаб.  Если пройтись по всем масштабам и отрисовать хотя бы раз каждый - все  начинает нормально работать. Т.е. такое ощущение, что при первой  отрисовки каждой из карт происходит какая то инициализация, приводящая к  довольно ощутимому подвисанию.
Цитата
21.02.2018 10:46:33
Просьба обратить внимание на такой момент (я его уже описывал). В новой версии GTK при отображении карты возникают подвисания при первой отрисовке каждого из уровней пирамиды. Если пробежаться по всем уровням и отрисовать хотя бы один раз каждый - все становится нормально. Далее можно прыгать куда угодно по карте и переключать масштабы и все будет ОК. Ранее такого не наблюдалось, все хорошо и быстро работало.
Чтобы не быть голословным, я собрал пример на MapViewer - портировал туда наш код работы с картой. Смотрите файлы:
map_engine.hpp
map_engine.cpp
MapView.h
MapView.cpp
MapDoc.h
MapDoc.cpp

Пример собирается в VisualStudio 2015. Собирать в другой студии не стоит, т.к. пример тянет зависимости, собранные в 15ой студии. Зависимости идут вместе с примером.
В архиве 2 папки: TestVC_old_gtk и TestVC_new_gtk. Сто старым и новым GTK соответственно. Код абсолютно одинаковый, разница только в библиотеках.
Запустите MapViewer.exe, далее File->Open, укажите файл к map.mdesc (файлы из архива с картой, который я вам уже присылал).
Загрузится карта. В данном примере можно двигать карту мышью (зажав левую кнопку), и менять ее масштаб (используя колесо прокрутки на мышке)
Покрутите колесико на обоих примерах, увидете ощутимую разницу. На старой версии GTK карта просто "летает", на новой пока вы не прокрутите до упора масштабы вверх/вниз все будет очень тормозить. После того как прокрутите все масштабы все нормализуется.
В чем причина? Можно это как то исправить?

Ссылку на архив отправляю Дмитрию личным сообщением
Передайте, пожалуйста, и данный вопрос на рассмотрению специалисту.
 
Цитата
Александр Волков написал:
Дмитрий, вы использовали неправильную последовательность.

Сначала надо открыть карту m100.sit, и к ней уже добавить airbases.map.

Преобразование на лету работает, но если вы сделаете так:

1. Открываем m100.sit
2. Добавляем к ней  airbases.map передавая 1 в transform: mapAppendDataEx(hMap, nameA, GENERIC_READ, 1)
3. Закрываем MapView
4. Меняем код: передаем в transform 0: mapAppendDataEx(hMap, nameA, GENERIC_READ, 0)
5. Собираем
6. Открываем m100.sit
7. Добавляем к ней  airbases.map

Вы данные airbases.map на экране не увидете.

Отсортировав карту и открыв ее в Панорама Мини вы всетаки увидете данные карты, но с кривыми координатами, как в моих предыдущих сообщениях.
Видимо проблема в сохранении карты
И этот тоже
 
Цитата
Александр Волков написал:
Дмитрий, вы использовали неправильную последовательность.


Сначала надо открыть карту m100.sit, и к ней уже добавить airbases.map.


Преобразование на лету работает, но если вы сделаете так:


1. Открываем m100.sit
2. Добавляем к ней  airbases.map передавая 1 в transform: mapAppendDataEx(hMap, nameA, GENERIC_READ, 1)
3. Закрываем MapView
4. Меняем код: передаем в transform 0: mapAppendDataEx(hMap, nameA, GENERIC_READ, 0)
5. Собираем
6. Открываем m100.sit
7. Добавляем к ней  airbases.map


Вы данные airbases.map на экране не увидете.


Отсортировав карту и открыв ее в Панорама Мини вы всетаки увидете данные карты, но с кривыми координатами, как в моих предыдущих сообщениях.
Видимо проблема в сохранении карты
Было бы интереснее, если бы инструция на использование данных поступала бы одновременно с самим архивом тестовых данных...
Это сэкономило бы много времени.

Модифицировал функцию CMapView::OnFileAppendSite в соответствии с новыми пожеланиями. Теперь мы физически трансформируем карту к системе координат базовой карты.
В качестве базовой карты используем m100.sit (СК-42), в качестве добавляемой карты - airbases.map (проекция Цилиндрическая Меркатора, код EPSG:3395, 3857).
Код
void CMapView::OnFileAppendSite()
{
    CFileDialog   theDlg(true, TEXT("*.sit"), NULL, OFN_SHOWHELP|OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR,
                       TEXT("Карты обстановки(*.sit)|*.sit|Все файлы (*.*)|*.*||"));
    
    HSITE hSite;
        
    if(theDlg.DoModal()==IDOK)
    {
//      if(GetHMAP()) hSite=::mapOpenSiteForMap(GetHMAP(), theDlg.GetPathName(),0);

  // Добавить данные к открытой карте (карту, растр, матрицу)
  // hMap -  идентификатор открытых данных
  // name - имя открываемого файла (MAP, SIT, MTW, MTQ, RSW, MPT)
  // mode - режим чтения/записи (GENERIC_READ, GENERIC_WRITE или 0)
  // Возвращает идентификатор типа данных (FILE_MAP - для векторной
  // карты, FILE_RSW - для растра, FILE_MTW - для матрицы, FILE_MTL - для
  // матрицы слоев, FILE_MTQ - для матрицы качеств), данные добавляются в
  // список последними, если данные уже были открыты, число открытых данных
  // (карт, растров, матриц) не меняется
  // transform - признак трансформирования пользовательской карты
  //             к ранее открытым данным (если проекции разные):
  //             0 - не трансформировать данные (преобразовывать "на лету"),
  //             1 - трансформировать данные при открытии и сохранить карту
  //                 в новой проекции,
  //            -1 - задать вопрос пользователю.
  // В серверной версии (-1) обрабатывается, как 0.
  // При ошибке возвращает ноль

   HMAP hMap = GetHMAP();
   if (hMap)
    { 
       char nameA[MAX_PATH_LONG] = {0};
       UnicodeToString(theDlg.GetPathName(), nameA, sizeof(nameA));
         // 0 - не трансформировать данные (преобразовывать "на лету"),
//       if (mapAppendDataEx(hMap, nameA, GENERIC_READ, 0) != 0)

         //             1 - трансформировать данные при открытии и сохранить карту
         //                 в новой проекции,
       if (mapAppendDataEx(hMap, nameA, GENERIC_WRITE, 1) != 0)
       {
          // Перерисовка карты

          // Координаты точки в системе координат СК-42
          DOUBLEPOINT point;
          
        point.X = 1701546.145;
        point.Y = 13373581.678;

        // Переместить центр экрана в заданную точку
          // point - координаты в метрах
          ViewPlanePoint(&point);

           Invalidate(false);
        UpdateWindow();
       }
       else 
       {
          AfxMessageBox(TEXT("Error while open Site"));
       }
   }
  }
}
//---------------------------------------------------------------------------


Для того, чтобы увидеть данные добавленной карты airbases.map на экране, выполняется перерисовка окна карты со смещением карты в интересующую точку:
Код
          // Перерисовка карты

          // Координаты точки в системе координат СК-42
          DOUBLEPOINT point;
          
     point.X = 1701546.145;
     point.Y = 13373581.678;

     // Переместить центр экрана в заданную точку
          // point - координаты в метрах
          ViewPlanePoint(&point);

          Invalidate(false);
          UpdateWindow();



Обратите внимание на применение функции mapAppendDataEx в ваших текстах:
Код
 for (auto &item: m_map_pyramid)
    {
        const std::string map_path = (boost::filesystem::path(file_path).branch_path() / item.name).string();
        item.hmap = st::panorama::mapOpenMap(map_path.c_str(), GENERIC_READ);
        if (0 == item.hmap)
        {
            _sprintf(m_last_error, sizeof(m_last_error), "Can't open file: '%s': mapOpenMap failed", map_path);
            return false;
        }
        if (!airbases_path.empty())
        {
            st::panorama::mapAppendDataEx(item.hmap, airbases_path.c_str(), GENERIC_READ, 1);  // Если закоментарить это, все будет ОК
        }

        st::panorama::mapSetBackColor(item.hmap, RGB(241, 238, 233));

        item.hselect = st::panorama::mapCreateMapSelectContext(item.hmap);
        st::panorama::mapSelectLayer(item.hselect, -1, 1);
        st::panorama::mapSetViewSelect(item.hmap, item.hselect);
    }

Открывается файл airbases_path.c_str() карты на чтение (GENERIC_READ) с флагом физического трансформирования карты 1.
Значения третьего и четвертого аргументов функции mapAppendDataEx противоречат друг другу.
Если предполагается трансформирование карты, то файл карты должен открываться с флагом GENERIC_WRITE, т.е. на запись.

mapAppendDataEx(hMap, nameA, GENERIC_WRITE, 1)

В функцию mapAppendDataEx добавлена проверка корректности входных параметров.
Если на вход функции mapAppendDataEx в качестве третьего и четвертого параметров будут приходить значения GENERIC_READ и 1, то карта (при необходимости)
будет трансформироваться "на лету" (в памяти).




Цитата
Александр Волков написал:
15.02.2018 12:08:30
Рендер пирамиды карт стал подтормаживать при переходе на новый масштаб.  Если пройтись по всем масштабам и отрисовать хотя бы раз каждый - все  начинает нормально работать. Т.е. такое ощущение, что при первой  отрисовки каждой из карт происходит какая то инициализация, приводящая к  довольно ощутимому подвисанию.

Цитата
Александр Волков написал:
21.02.2018 10:46:33
Просьба обратить внимание на такой момент (я его уже описывал). В новой версии GTK при отображении карты возникают подвисания при первой отрисовке каждого из уровней пирамиды. Если пробежаться по всем уровням и отрисовать хотя бы один раз каждый - все становится нормально. Далее можно прыгать куда угодно по карте и переключать масштабы и все будет ОК. Ранее такого не наблюдалось, все хорошо и быстро работало.

Ваш вопрос решен.

Обновленные библиотеки GTK-12 размещены на нашем сайте: http://gisinfo.ru/download?id=211
Изменено: Dmitry_ - 27.02.2018 17:55:47
 
Цитата
Dmitry_ написал:
Цитата
Было бы интереснее, если бы инструция на использование данных поступала бы одновременно с самим архивом тестовых данных...
Это сэкономило бы много времени.

Дмитрий вы уж извините, но было бы интереснее если бы люди, отвечающие за поддержку клиентов, внимательнее относились к проблемам, возникших у клиентов, вникали бы в них и не отвечали, извиняюсь, на так сказать "отстань". Мы тут колупаемся уже 3 месяца и пошла 7ая страница форума!
Я вам давно уже сюда выкладывал код работы с картой, писал что нужно делать, вы его видели и даже пробовали несколько раз его запускать.
Цитата
Сообщение от 15.02.2018 12:08:30 на 5ой странице форума

Недавно возникла необходимость обновлять кое какие данные в карте, и  скорее всего это будет происходить довольно часто. Для того, чтобы не  трогать основную карту, которая не меняется, а это целая большая  пирамида, я подумал, почему бы нам не генерить дополнительную карту с  слоем, который мы хотим обновлять, и не добавлять бы его к базовой карте  на этапе загрузки.
Решил воспользоваться функцией mapAppendDataEx,  ее использование сейчас приводит к падению приложения, притом падение  происходит где-то сильно дальше по коду, как буд-то кто-то попортил  память. Если использование данной функции закомментарить, все ок (раньше  код был без этой функции).

Вот код загрузки пирамиды:
Код
for (auto &item: m_map_pyramid)
    {
        const std::string map_path = (boost::filesystem::path(file_path).branch_path() / item.name).string();
        item.hmap = st::panorama::mapOpenMap(map_path.c_str(), GENERIC_READ);
        if (0 == item.hmap)
        {
            _sprintf(m_last_error, sizeof(m_last_error), "Can't open file: '%s': mapOpenMap failed", map_path);
            return false;
        }
        if (!airbases_path.empty())
        {
            st::panorama::mapAppendDataEx(item.hmap, airbases_path.c_str(), GENERIC_READ, 1);  // Если закоментарить это, все будет ОК
        }

        st::panorama::mapSetBackColor(item.hmap, RGB(241, 238, 233));

        item.hselect = st::panorama::mapCreateMapSelectContext(item.hmap);
        st::panorama::mapSelectLayer(item.hselect, -1, 1);
        st::panorama::mapSetViewSelect(item.hmap, item.hselect);
    }

При использовании данной функции происходят интересные вещи: рядом с  картой создается папка Copy, в которую по всей видимости помещается  копия карты, но если ее открыть через MapViewer, то ни одного объекта не  отображается, при этом портится исходная карта, открыв которую вы тоже  не увидите объектов.
На что вы мне ответили
Цитата
Предлагаю для создания и добавления производной карты L0,L1... *.SITX  применять современную функцию mapCreateAndAppendSiteForMap.
...
Настораживает появление папки Copy. Функции ГИС-ядра не создают папку с названием "Copy".
А потом вы предложили зачем то сортировать карту, и указали что она там куда-то "улетела" и что координаты не те.

А про историю с внезапно пропавшей функцией ShpLoadToFolder и предложением поискать что-то другое в API я вообще молчу.

С таким подходом, действительно тратится уйма времени. Но проблема отнюдь не в клиенте...

Спасибо за решенные проблемы. Но вы не ответили на еще один вопрос: MapViewer падает в DEBUG сборке, пожалуйста, давайте решим еще этот немаловажный момент!
 
Цитата
Александр Волков написал:
Спасибо за решенные проблемы. Но вы не ответили на еще один вопрос: MapViewer падает в DEBUG сборке, пожалуйста, давайте решим еще этот немаловажный момент!
Ваш вопрос решен.

Обновленный архив тестового примера для Visual Studio 2008 C++ по применению библиотек GIS ToolKit размещен на нашем сайте: http://gisinfo.ru/download?id=208.
 
Хьюстон! У нас снова проблемы... :(
Можно ли устранить данную проблему во всех модулях?
access_violation.png (206.72 КБ)
Изменено: Александр Волков - 01.03.2018 18:04:23
 
Цитата
Александр Волков написал:
Можно ли устранить данную проблему во всех модулях?
Ваш вопрос передан специалисту на рассмотрение.

Спасибо!
Страницы: Пред. 1 ... 5 6 7 8 9 След.
Читают тему (гостей: 1)



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

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