Страница 1 из 2

File Dialog Express VI ошибка 43, но не 43

Добавлено: 19 май 2019, 01:14
Artem.spb
Большая программа, поэтому всю выложить не могу.
Есть File Dialog Express VI, который рекомендуется вместо того VI, который запрятан внутрь этого Express VI, не суть.

В общем, проблема такая.
Программе иногда надо спросить у пользователя файл (что открыть, куда сохранить и пр.). Использую этот Express VI. И всё хорошо, пока не случится что-то странное.
Окно выбора перестаёт появляться, а функция сразу выдаёт ошибку 43 ("пользователь нажал отмену"). Но пользователь ничего не нажимал, потому что окно не появлялось.
Более того, с этого момента окно больше не появится до перезагрузки LV/exe. Вот как это выглядит:
W29nzWMvJTo

И ещё до кучи: с этого момента выбор файла соверешенно не работает: попытался сделать этот снипет, окно тоже не выскочило.
ExpressVI.png
Кто-нибудь сталкивался? знаете как чинить или обойти?
LV15, менять крайне нежелательно.

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 19 май 2019, 13:15
Blackman
Если для создания путей файлов используются функции форматирования строк, проверяйте сформированные строки на зарезервированные символы (коды символов) и запрещенные первый и последний символы в имени файла. Так же убедитесь, что не используются зарезервированные слова (строки), например CON :haha: .

filename limitations
https://en.wikipedia.org/wiki/Filename
Naming Conventions
https://docs.microsoft.com/ru-ru/window ... onventions

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 19 май 2019, 14:04
Artem.spb
Всё корректное.
Конкретно в этом примере, в базе лежит путь по которому файл лежал раньше. Если прога его не находит (файл перенесли), она спрашивает, где он. Все имена корректные.
Более того, вот такой код
save2.png
Часто становится первенцем, уже на нём выдаёт 43 и после этого ничего не работает. Это разные режимы работы программы, совершенно разные участки кода.

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 19 май 2019, 22:25
Kosist
Попробуйте отдебажить эту експресс- :vi: как обычную :vi:-ку (конвертируйте, и посмотрите что там происходит). Т.к. сейчас мне не верится, что путь действительно правильный - ведь задается лишь имя файла. А дефолтная директория для файла правильная? Как Вы проверили абсолютный путь к файлу, который обрабатывает функция?
На видео видно, что, например, диалоговое окно для автоматической обработки ошибки - кастомное. Это ведь Вы его переделали? Может, "зацепили" что-то еще, и тепер какую-то встроенную функцию "глючит"?

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 19 май 2019, 23:43
Artem.spb
Kosist писал(а):На видео видно, что, например, диалоговое окно для автоматической обработки ошибки - кастомное. Это ведь Вы его переделали? Может, "зацепили" что-то еще, и тепер какую-то встроенную функцию "глючит"?
оно не кастомное, оно более чем стандартное (обычный dialog с двумя кнопками). Если в итоге работы этой функции всё же случается баг, то программа просто сообщает пользователю, что всё пропало.

а логер сейчас делаю для тотальной слежки за функцией.

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 20 май 2019, 00:52
Artem.spb
Вынул нутро express VI, сдела vi, который полностью отчитывается о проделанной работе. Вот две последние записи.

Код: Выделить всё

0:42:16 20.05.2019; prompt: ; selMode: new or existing file; path: <Not A Path>; defname: ; errIn: FALSE; code: 0; sourse : ; selPath: C:\Users\User\Desktop\22.png; cancel: FALSE; pattern: *.png; Plabel: ; errOut: FALSE; code: 0; sourse : ; chain: file_dialog.vi -> save_control_image.vi -> data_analise_trecks3D.vi -> data_analise_trecks3D.vi.ACBRProxyCaller.E7E00116
; dt: 3,29

0:42:50 20.05.2019; prompt: Программа не нашла файл "camera1[2018-10-09(13-28-20)_2018-10-09(13-46-20)].avi".
Укажите, где он сейчас располагается; selMode: existing file; path: <Not A Path>; defname: camera1[2018-10-09(13-28-20)_2018-10-09(13-46-20)].avi; errIn: FALSE; code: 0; sourse : ; selPath: <Not A Path>; cancel: TRUE; pattern: ; Plabel: ; errOut: TRUE; code: 43; sourse : file_dialog.vi->correct_check_and_ask_file.vi->corrects.vi->corrects.vi.ACBRProxyCaller.E8C0010E
.ACBRProxyCaller.E8C0010E; chain: file_dialog.vi -> correct_check_and_ask_file.vi -> corrects.vi -> corrects.vi.ACBRProxyCaller.E8C0010E
; dt: 0,01
1) пользователь (я) выбрал для экспорта файл C:\Users\User\Desktop\22.png, заняло это 3,2с
2) программа не нашла файл camera1[2018-10-09(13-28-20)_2018-10-09(13-46-20)].avi и "спросила", где он. И за 0,01с пользователь как бы отказался выбирать.

возможно дело в связке с vision, потому что воспроизвести подобный глюк вне полной проги я не могу. Например, снипет из моего первого поста сам пос себе работает без проблем, как бы я над ним ни изголялся с неправильными именами и отменами выбора. Оно всё равно выскакивает.

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 20 май 2019, 11:17
Kosist
Artem.spb писал(а):оно не кастомное, оно более чем стандартное (обычный dialog с двумя кнопками). Если в итоге работы этой функции всё же случается баг, то программа просто сообщает пользователю, что всё пропало.
А, я не заметил, что окно появляется в самом конце, что это не автоматическая обработка ошибок...

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 20 май 2019, 11:52
Kosist
Я бы изменил алгоритм. Вначале проверяйте, существует ли файл (Check if File or Folder Exists.vi), и не пустой ли путь - а уже потом открывайте окно для выбора файла. Может, так можно будет избежать этот "глюк".

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 20 май 2019, 16:07
Artem.spb
Я именно так и делаю.
Если нужно открыть файл. проверяю его наличие. Если файла нет, то спрашиваю, где он. Если есть, то открываю сразу.
Если же нужно что-то сохранить, то сразу спрашиваю, куда.

И пустой путь не мешает - много раз вызывал этот диалог со всеми пустыми входами.

Есть какая-то мелочь, которую я упускаю.

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 21 май 2019, 05:02
Vitekkz88
И пустой путь не мешает - много раз вызывал этот диалог со всеми пустыми входами.
Вы пробовали собирать логику без использования Express.vi?
Могу предложить попробовать в явном виде достать блок File Dialog.vi и проверить работу на нём, либо собрать логику из обычных блоков по работе с файлами. Возможно попробовать использовать отличный от текущего Select Mode. У Вас там было что-то про использование Vision. Пробуйте скрыть Vision-блоки в общей программе и проверять. Express dialog у вас запрятан в несколько subVI, вложенность 3. Попробуйте поднять его выше и так же проверить. Это всё фокусы, но и сама ситуация странная. Ну и константу на путь создайте. Диалог откроется в любом случае, а нам -1 из вариантов возможных проблем.

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 21 май 2019, 22:53
Artem.spb
Продолжаю развлекаться
Вы пробовали собирать логику без использования Express.vi?
Могу предложить попробовать в явном виде достать блок File Dialog.vi и проверить работу на нём, либо собрать логику из обычных блоков по работе с файлами.
один из первых тестов. Вытащил самое нутро (которым типа нельзя пользоваться). Не помогло.
Возможно попробовать использовать отличный от текущего Select Mode.
мне нужно или новый файл для экспорта результатов, или существующий для открытия видео. Другие режимы не пойдут.
У Вас там было что-то про использование Vision. Пробуйте скрыть Vision-блоки в общей программе и проверять.
пошёл в обратную сторону. Работает без проблем. Если быть точным, ошибка не появилась в пределах времени "кликал пока не надоело".
fd2.png
Express dialog у вас запрятан в несколько subVI, вложенность 3. Попробуйте поднять его выше и так же проверить. Это всё фокусы, но и сама ситуация странная.
тяжко. Он гораздо дальше чем на 3 уровня. После проверки Vision (видимо, отпало), начал грешить на subpanel. Потестил. Тоже не виноваты.
Ну и константу на путь создайте. Диалог откроется в любом случае, а нам -1 из вариантов возможных проблем.
Добавил проверку. Если путь кривой, подаю c:. Не помогло.

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 22 май 2019, 00:19
Kosist
А у Вас есть возможность сбросить пример в связке с Vision?
Также, а если собрать екзешник - проблема присутствует?

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 22 май 2019, 00:29
Artem.spb
Kosist писал(а):А у Вас есть возможность сбросить пример в связке с Vision?
это и есть он.
fd2.png
Есть ещё предположение, что именно индикатор vision всё портит, но нет времени проверять.
Сейчас просто делаю так, чтобы файлы сами знали, куда сохраняться. Иначе тяжело работать пользователям. Эксперименты продолжу позже

Весь проект ~300 функций, раскрывать не готов. А выделять тестовый кусок опять же долго.
Также, а если собрать екзешник - проблема присутствует?
она в exe быстрее проявляется. 2-3 диалога и всё. Я при отладке в 2-3 раза дольше жду, когда появится. Иногда даже начинаю думать, что наконец-то, починил.

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 22 май 2019, 10:40
Kosist
Ваш пример у меня работает без проблем...
Любопытная деталь. Тестировал свой код, совсем другой функционал чем у Вас. Но, внутри одной из виайки тоже используется File Dialog виайка. И когда я запустил код на cRIO, то тоже получил на выходе этой функции ошибку 43. Т.к. на cRIO диалоговые окна не поддерживаются (узлы свойств и методы, и т.д.). Т.е. виайка не могла открыть диалоговое окно, и выбросила ошибку 43... Но такое поведение происходит потом всегда, а в Вашем же случае - время от времени... Плюс ко всему, Ваша программа исполняется на Windows, проблем по идее не должно было бы быть...

Re: File Dialog Express VI ошибка 43, но не 43

Добавлено: 22 май 2019, 15:54
dadreamer
Artem.spb писал(а):один из первых тестов. Вытащил самое нутро (которым типа нельзя пользоваться). Не помогло.
Если нативный File Dialog выдаёт ошибку, можно попробовать спуститься ещё ниже и проверить на вот такой встроенной функции:
Untitled 1.vi
ExtFileDialog
lv15
(6.63 КБ) 172 скачивания
ExtFileDialog, как и жёлтый File Dialog, использует безымянную встроенную функцию, которая чрезвычайно капризна к параметрам и вообще, похоже, не менялась больше десятилетия, а только обрастала обёртками. Вполне возможны баги в работе функции на современных осях в связи с переходом на Common Item Dialog API. В качестве альтернативы можно попробовать арсенал Винды: https://stackoverflow.com/questions/416 ... filedialog