PictureView 3 — просмотр изображений различных форматов

Здесь можно обсудить ваш любимый плагин.
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

В этой теме обсуждается плагин PictureView 3.
Старый тред с обсуждением предыдущих версий: PictureView 1 и 2.

Дальнейшее развитие версии 1.5, переделано под API Far 3.0.



Об извлечении плагинов из дистрибутивов ACDSee.


PS: API как было убогим в Far 2, так и осталось...
Attachments
PictureView3_20140813_last_xp.7z
Последняя версия, работающая на WinXP
(321.22 KiB) Downloaded 1185 times
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

Latest post of the previous page:

Да: у ITP очень низкий приоритет – его спрашивают последним. А ACDSee декодер имеет свойство искать JPEG в некоторой окрестности, а не только с начала файла.

В принципе, сейчас можно полностью отказаться от IDE_ACDStd.apl – другие декодеры быстрее или лучше.
User avatar
Grom PE
Posts: 34
Joined: Sun 21 Jun, 2015 14:24
Has thanked: 5 times
Been thanked: 2 times
Contact:

PictureView 3 — просмотр изображений различных форматов

Post by Grom PE »

Хотел обновиться, потом вспомнил, что нужна версия с зумом nearest neighbor. Не выношу размытости при кратном зуме больше 100%. Почему бы не сделать опцию?
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

Grom PE wrote: Fri 31 May, 2019 12:50 Хотел обновиться, потом вспомнил, что нужна версия с зумом nearest neighbor.
Декодеры в большинстве случаев можно безопасно обновлять без изменения самого PV.
Если у вас и так всё работает – то новые заплатки вам не нужны.
Grom PE wrote: Fri 31 May, 2019 12:50 Почему бы не сделать опцию?
Возможно, я дойду до этого.
Last edited by SEt on Fri 31 May, 2019 22:41, edited 1 time in total.
User avatar
a'Lexus
Posts: 50
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus »

На билдах Far старше 5457, при открытом через ArcLite архиве на одной панели, рушит Far после попытки смены диска или создания каталога на второй панели.

Code: Select all

   ╔══════════════════════════ Exception occurred ══════════════════════════╗
   ║ Exception:   0xC0000005 - EXCEPTION_ACCESS_VIOLATION                   ║
   ║ Details:     Memory at 00007FF8C7B22820 could not be read              ║
   ║ errno:                                                                 ║
   ║ LastError:                                                             ║
   ║ NTSTATUS:                                                              ║
   ║ Address:     0x7FF77532BE8E - Far.exe!<unknown> (get the pdb)          ║
   ║ Source:                                                                ║
   ║ Function:    main                                                      ║
   ║ Module:      D:\Far Manager\Far.exe                                    ║
   ╟────────────────────────────────────────────────────────────────────────╢
   ║          { Terminate Far } [ Stack ] [ Minidump ] [ Ignore ]           ║
   ╚════════════════════════════════════════════════════════════════════════╝
In love with FAR since 1997
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT »

a'Lexus, сделайте, как написано тут: Поведение при обнаружении проблем.
И если рядом с Far.exe подложить соответствующий Far.pdb (например, скачать свежий Фар и оттуда же для него архив с PDB-файлом) и нажать в диаложке кнопку [ Stack ], то что выведется?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
a'Lexus
Posts: 50
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus »

Stack:
In love with FAR since 1997
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT »

a'Lexus wrote: Thu 05 Sep, 2019 22:52Stack:
А где выполненные предшествующие требования? Телепатов тут нет.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
a'Lexus
Posts: 50
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus »

Last edited by HaRT on Fri 06 Sep, 2019 11:37, edited 1 time in total.
Reason: Спрятан офтопик
In love with FAR since 1997
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT »

 ! Message from: HaRT
a'Lexus wrote: Fri 06 Sep, 2019 06:51 Или пусть пользователи выявят проблему, поправят все сами, а вам дадут готовый результат?
Да, это предпочтительный вариант.
А пока на всякий случай перечитайте Правила. Судя по вашему тону, вы давно этого не делали.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
a'Lexus
Posts: 50
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus »

Last edited by HaRT on Fri 06 Sep, 2019 11:35, edited 1 time in total.
Reason: Спрятан офтопик
In love with FAR since 1997
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

PictureView 3 — просмотр изображений различных форматов

Post by zg »

a'Lexus wrote: Fri 06 Sep, 2019 11:32Стоит учесть,что указывая проблему, я оказываю вам услугу.
нет, если это не полноценный багрепорт.
1. очень часто в таких случаях реально ошибки нет. выясняется это долго, трата времени впустую.
2. даже если баг есть, то в итоге он проявится у того, кто сможет сделать полноценный багрепорт.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

PictureView 3 — просмотр изображений различных форматов

Post by John Doe »

a'Lexus wrote: Fri 06 Sep, 2019 06:51 Тупо скопировать в Plugins последниего билда Far плагин и проверить его работу не судьба?
Не воспроизводится.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

PictureView 3 — просмотр изображений различных форматов

Post by DrKnS »

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

a'Lexus, со стеком гораздо лучше, спасибо.

Очевидно, что кто-то опять неправильно работает с COM и вызывает лишний CoUninitialize, убивая этим ITaskbarList3 внутри фара.

В дистрибутиве плагина с COM работают вроде бы только ITP.pvd и WIC.pvd.

ITP.pvd:
  1. public pvdInit
  2.  
  3. pvdInit proc near
  4.  
  5. sub     rsp, 28h
  6.  
  7. mov     edx, 6          ; dwCoInit
  8.  
  9. xor     ecx, ecx        ; pvReserved
  10.  
  11. call    cs:CoInitializeEx
  12.  
  13. xor     ecx, ecx
  14.  
  15. test    eax, eax
  16.  
  17. setns   cl
  18.  
  19. mov     eax, ecx
  20.  
  21. add     rsp, 28h
  22.  
  23. retn
  24.  
  25. pvdInit endp
  26.  
  27.  
  28.  
  29. public pvdExit
  30.  
  31. pvdExit proc near
  32.  
  33. jmp     cs:CoUninitialize
  34.  
  35. pvdExit endp
Предполагаю, это примерно соответствует
  1. bool pvdInit()
  2.  
  3. {
  4.  
  5.     return SUCCEEDED(CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE));
  6.  
  7. }
  8.  
  9.  
  10.  
  11. void pvdExit()
  12.  
  13. {
  14.  
  15.     CoUninitialize();
  16.  
  17. }


WIC.pvd:
  1. public pvdInit
  2.  
  3. pvdInit proc near
  4.  
  5. ...
  6.  
  7. sub     rsp, 48h
  8.  
  9. mov     edx, 6          ; dwCoInit
  10.  
  11. xor     ecx, ecx        ; pvReserved
  12.  
  13. call    cs:CoInitializeEx
  14.  
  15. test    eax, eax
  16.  
  17. jns     short loc_18000121C
  18.  
  19.  
  20.  
  21. public pvdExit
  22.  
  23. pvdExit proc near
  24.  
  25. sub     rsp, 28h
  26.  
  27. mov     rcx, cs:ppv
  28.  
  29. mov     rax, [rcx]
  30.  
  31. call    qword ptr [rax+10h]
  32.  
  33. add     rsp, 28h
  34.  
  35. jmp     cs:CoUninitialize
  36.  
  37. pvdExit endp
Предполагаю, это примерно соответствует
  1. bool pvdInit()
  2.  
  3. {
  4.  
  5.     if (FAILED(CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)))
  6.  
  7.         return false;
  8.  
  9.     /* something */
  10.  
  11. }
  12.  
  13.  
  14.  
  15. void pvdExit()
  16.  
  17. {
  18.  
  19.     /* something */
  20.  
  21.     CoUninitialize();
  22.  
  23. }

Я не знаю, как там работает интерфейс PVD и вызывается ли pvdExit, если pvdInit вернул false (исходников нет, документации нет, а ковыряться дальше мне лень). Если вызывается - ой, если нет - видимо, валит кто-то другой.
Но даже то, что выше - неправильно, т.к. модули не будут работать, если кто-то уже проинициализировал COM в другом режиме.

Как правильно инициализировать COM (у меня такое чувство, что нужна статья в Писании):
  1. void foo()
  2.  
  3. {
  4.  
  5.     HRESULT Result = CoInitializeEx(/* whatever */);
  6.  
  7.     bool ComInitialized = SUCCEEDED(Result);
  8.  
  9.     bool ComAvailable = ComInitialized || Result == RPC_E_CHANGED_MODE;
  10.  
  11.  
  12.  
  13.     if (ComAvailable)
  14.  
  15.     {
  16.  
  17.         // Use COM
  18.  
  19.     }
  20.  
  21.  
  22.  
  23.     if (ComInitialized)
  24.  
  25.         CoUninitialize();
  26.  
  27. }
User avatar
a'Lexus
Posts: 50
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus »

John Doe wrote: Fri 06 Sep, 2019 15:41 Не воспроизводится.
DrKnS wrote: Fri 06 Sep, 2019 15:52 со стеком гораздо лучше, спасибо.
Может вот ,что еще поможет:/
Far30b5462.x64.20190902 работает без проблем, 5463 у меня нет, 5464 и более старшие крашатся сразу после запуска.
При повторном запуске - при смене диска или создании каталога.
Steck при запуске:


p.s. Смею предположить, что повлияло вот это:
drkns 02.09.2019 21:09:11 +0100 - build 5463
1. Инициализируем COM как multithreaded, вроде бы так правильнее в нашем случае.
Last edited by a'Lexus on Fri 06 Sep, 2019 19:19, edited 1 time in total.
In love with FAR since 1997
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

PictureView 3 — просмотр изображений различных форматов

Post by Smitis »

После 5462 ФАР начал падать, но только сегодня наконец собрался и выяснил, что это PictureView. Оказалось, это не только у меня.
Если что, есть стек, минидамп, но, как понял, это уже не нужно и причина выявлена.
Разум когда-нибудь победит.
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

Да, есть такое, в PV вызывался CoUninitialize при не успешном CoInitializeEx. В следующей версии будет исправлено.

Но в данном случае – это была очень полезная ошибка, так как иначе вот это прошло бы тихо:
drkns 02.09.2019 21:09:11 +0100 - build 5463
1. Инициализируем COM как multithreaded, вроде бы так правильнее в нашем случае.
Какая прекрасная идея: "вроде бы так правильнее"! А что должны сделать плагины? Как им понять, что теперь COM работает по-другому?

EDIT:
Ну и MSDN говорит, что
Because OLE technologies are not thread-safe, the OleInitialize function calls CoInitializeEx with the COINIT_APARTMENTTHREADED flag. As a result, an apartment that is initialized for multithreaded object concurrency cannot use the features enabled by OleInitialize.
Applications that use the following functionality must call OleInitialize before calling any other function in the COM library:
  • Clipboard
  • Drag and Drop
  • Object linking and embedding (OLE)
Так что в плагинах ещё что-то может принципиально отвалиться, если они теперь обязаны жить в COINIT_MULTITHREADED.
Last edited by SEt on Sat 07 Sep, 2019 23:30, edited 2 times in total.
Post Reply

Return to “Обсуждение плагинов”