Перейти к содержанию
Fire Monkey от А до Я
  • 0

access violation в windows7


Vitaldj

Вопрос

Опубликовано

Добрый день! Долго рассказывать не буду, но ни с того не с  сего взялась ошибка, которую отловить не могу. В общем краткая предыстория. Пишу более полугода универсальное приложение под десктопные компьютеры (win32/64, Mac). Программирую в виртуальной машине в win7 установленной на macbookpro. Использую помимо стандартных компонент - доступ к базам данных от devart, TMS Pack for FireMonkey и TMS FlexCel for VCL & FireMonkey. Дома стационарный на windows7. После компиляции всегда проверял в виртуальной состеме на win7/win8 и на живом маке и на работе под XP. И, в общем то всегда все работало. Сегодня, пришла идея проверить на работе на других компьютерах (работаю в большом заведении, где много компьютеров). И каково было мое удивление, когда я обнаружил, что под часть компьютеров по win7 прога на запустилась! 50 на 50. И все под win7. Под ХР запустилась на всех! Под win8 у нас нет. Ошибка сабая дурацкая access violation и символы (см скриншот)

 

post-96-0-84279100-1443596232.jpg

 

Причем, на всех видна края главной формы, а остальное - темное пятно. После нажатия на форму, появляется интерфейс программы, но ничего не реагирует, кнопки не нажимаются. Если попытаться несколько раз нажать, то появляется ошибка access violation, но в ней указана dll: msvcrt.dll. Пытался ее подсунуть с рабатающего компа, ни один из вариантов на работает. Такое ощущения, что это связано с какими то виндусовскими компонентами. причем, откомпилировал новый проект (пустая форма с одной кнопкой) и он запустился на всех компьютерах!

Кто нибудь сталкивался с этим? Чувствую, что счас буду предлагать обновить драйвера видеокарты, но это учреждение и нет прав администратора что бы это сделать.

Рекомендуемые сообщения

  • 0
Опубликовано

Исходя из вышеизложенного, могу предложить понаделать "урезанных" версий программы, где выкинута та или иная часть компонентов/кода, и таким образом попытаться локализовать проблему.

  • 0
Опубликовано

Прежде чем что-то обновлять, неплохо было бы вычислить виновника, поскольку исходное сообщение AV - не информативно совсем.

При компиляции под винду задействуйте MadExcept /EurecaLog, etc..., он покажет полный стек, включая строки кода, который привел к возникновению AV. Таким образом можно вычислить, кто сплоховал, а дальше ... по обстоятельствам.

  • 0
Опубликовано

Исходя из вышеизложенного, могу предложить понаделать "урезанных" версий программы, где выкинута та или иная часть компонентов/кода, и таким образом попытаться локализовать проблему.

Как говориться, уже проделал. Сделал проект с нуля, кидал контролы. Все работает. Но споткнулась на очень интересной вещи! В общем, в контролы в которых можно что либо забивать (есть фокус ввода), например memo или edit и если в них на дизайн этапе что нибудь прописать, то и возникает эта ошибка.  Причем, что самое поразительное, если попробуешь это сделать программно в рантайме, например: edit1.text = 'что нибудь' , и эту строчку поместить в ЛЮБОЕ событие, то возникает эта ошибка. Помещал и на oncreat формы и просто на клик по кнопке!!!!

Но если ручками пишешь текст в edit, то все нормально.

  • 0
Опубликовано

Попробуйте скомпилить проект с параметрами

  ...
  GlobalUseDX10 := False;
  GlobalUseDX10Software := True;  // или GlobalUseDXInDX9Mode := True;
  Application.Initialize;
  ...

и посмотрите на результат. Можно "поиграть" с этими параметрами.

Если не поможет - будем думать...

  • 0
Опубликовано (изменено)

Попробуйте скомпилить проект с параметрами

...  GlobalUseDX10 := False;  GlobalUseDX10Software := True;  // или GlobalUseDXInDX9Mode := True;  Application.Initialize;  ...
и посмотрите на результат. Можно "поиграть" с этими параметрами.

Если не поможет - будем думать...

Хорошо, спасибо, попробую завтра утром! Счас уже дома, а дома, как вы поняли, на всех компах нормуль;) Изменено пользователем Vitaldj
  • 0
Опубликовано

у меня похожий косяк был с компонентами AlphaControls!

иногда возникала ошибка, иногда нет! (из 40-45 запусков - 1 раз рамка окна, черный фон, AV)

убрал AlphaControls. Ошибки ушли.

  • 0
Опубликовано (изменено)

Коллеги, проблема решилась!!!! Навел на решение AlexG, спасибо ему! В общем прописал:

FMX.Types.GlobalUseDirect2D:=false;
Application.Initialize;

Только эта строчка и помогла! 

Теперь вопросы продвинутым пользователям:

- что конкретно отключает эта строчка?

- чем чревато это отключение?

- и так как эта проблема воспроизводится только на компах с win7, как прописать ее только для 7? Знаю и пользуюсь директивами компилятора для windows:

 {$ifdef mswindows} ..... {$ENDIF} даже использую для фильтрации кода в 32/64  {$IFDEF Win32} ..... {$ENDIF} и тд, но как фильтрануть только для win7?

Изменено пользователем Vitaldj
  • 0
Опубликовано

какие то проблемы с видеокартами на машинах. дрова нормальные там стоят? 

 

да и вообще, для таких дел, при использовании под win32 можно использовать EurekaLog она все покажет где и что. 

  • 0
Опубликовано

какие то проблемы с видеокартами на машинах. дрова нормальные там стоят? 

 

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

  • 0
  • Модераторы
Опубликовано

Коллеги, проблема решилась!!!! Навел на решение AlexG, спасибо ему! В общем прописал:

FMX.Types.GlobalUseDirect2D:=false;
Application.Initialize;

Только эта строчка и помогла! 

Теперь вопросы продвинутым пользователям:

- что конкретно отключает эта строчка?

- чем чревато это отключение?

- и так как эта проблема воспроизводится только на компах с win7, как прописать ее только для 7? Знаю и пользуюсь директивами компилятора для windows:

 {$ifdef mswindows} ..... {$ENDIF} даже использую для фильтрации кода в 32/64  {$IFDEF Win32} ..... {$ENDIF} и тд, но как фильтрануть только для win7?

кажется так для Win7

TOsVersion.Major = 6, Minor = 1

  • 0
Опубликовано

ну а что делать то еще? сам фреймфорк заточен под 3д ускорители и работает с ними. Что бы не было таких глюков надо делать на vcl где не используется 3d для отрисовки объектов. 

 

да и кстати я бы не сказал что отключение использования 3d так сильно тормозит. наоборот быстрее пашет, и заметно это при большом количестве текста на экране состоящего из tlabel. fmx тормозит при прорисовке. я вообще на одной из программ все директиксы да директ2д отрубал и этими же параметрами включал GDI+ только -    GlobalUseDX:=false;. И шрифт нормально сглаживался и вид приличнее был. 

  • 0
Опубликовано

ну а что делать то еще? сам фреймфорк заточен под 3д ускорители и работает с ними. Что бы не было таких глюков надо делать на vcl где не используется 3d для отрисовки объектов. 

 

да и кстати я бы не сказал что отключение использования 3d так сильно тормозит. наоборот быстрее пашет, и заметно это при большом количестве текста на экране состоящего из tlabel. fmx тормозит при прорисовке. я вообще на одной из программ все директиксы да директ2д отрубал и этими же параметрами включал GDI+ только -    GlobalUseDX:=false;. И шрифт нормально сглаживался и вид приличнее был. 

Ваша правда(. Но мне интересна кроссплатформенность, значит без FMX не обойтись. А тормозов и я тоже не заметил)))

  • 0
Опубликовано

Во-первых - я думаю, что

FMX.Types.GlobalUseDirect2D:=false;

не единственное решение. (на собственном опыте)

 

Во-вторых - если не очень много "активной" графики, то это не скажется сильно на быстродействии (опять же - на собственном опыте)

 

Ну и наконец, насколько я понимаю, - не реально ДО определения данных переменных

  GlobalUseDX10
  GlobalUseDX10Software

  и прочих...
что-либо сделать предварительно...

Я, конечно, могу ошибаться. И буду искренне признателен, если меня поправят и напишут тут - как можно менять их до того как приложение инициализируется.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...