Перейти к содержанию
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 пользователей онлайн

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