Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[WCX] Wcx6432: 64-в-32-битный транслятор для WCX плагинов
Goto page 1, 2, 3, 4  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Tue Jun 14, 2016 12:38    Post subject: [WCX] Wcx6432: 64-в-32-битный транслятор для WCX плагинов Reply with quote

Wcx6432 позволяет использовать 32-битные WCX-плагины в 64-битном ТК.

Wcx6432 Beta 224


Установка:

1. Извлеките в любую папку.
2. Поместите файл Wcx6432.ini в папку ТК и поправьте в нём пути к файлам транслятора.
3. Скопируйте Wcx6432.wcx64 в папки желаемых 32-битных WCX-плагинов и переименуйте согласно именам плагинов (например, в случае плагина MSI-Plus.wcx имя файла должно быть MSI-Plus.wcx64).


Как работает транслятор:

ТК обращается к маленькому загрузчику Wcx6432.wcx64, который читает Wcx6432.ini и загружает Wcx6432-клиента (Wcx6432c.dll), затем клиент запускает Wcx6432-сервер (Wcx6432s.exe) и устанавливает соединение с ним. Сервер загружает 32-битный плагин и вызывает его функции, когда ТК вызывает эти функции у загрузчика. Так, только маленький загрузчик присутствует в нескольких экземплярах, остальные файлы лежат в одном месте и легко могут быть обновлены.

Плагин пока на бета-стадии, поддерживаются не все функции.
Большинство функций поддерживается. Не поддерживаются только функции упаковки прямо в памяти.
Какие-то редкие функции/обратные вызовы могут не работать, т.к. я не тестировал их на своём наборе плагинов.


Техническая информация о поддерживаемых функциях:

Загрузчик экспортирует все функции WCX-интерфейса, что приводит к побочному эффекту: ТК думает, что плагин поддерживает всё. В частности, он вызывает только юникодные и расширенные функции (ReadHeaderExW, а не ReadHeaderEx или ReadHeader). Поэтому вызовы расширенных функций транслируются в вызовы реально поддерживаемых плагином функций, для неподдерживаемых функций возвращаются значения по умолчанию и ошибки.

Вызовы этих функций транслируются:
PackSetDefaultParams
PkSetCryptCallback
SetChangeVolProcW
SetChangeVolProc
SetProcessDataProcW
SetProcessDataProc
OpenArchiveW
OpenArchive
ReadHeaderExW
ReadHeaderEx
ReadHeader
ProcessFileW
ProcessFile
CloseArchive
PackFilesW
PackFiles
DeleteFilesW
DeleteFiles
GetPackerCaps
GetBackgroundFlags
ConfigurePacker
CanYouHandleThisFileW
CanYouHandleThisFile

Вызовы этих функций ещё не транслируются:
StartMemPackW
StartMemPack
PackToMem
DoneMemPack

Для тестирования всех функций нужен набор плагинов, экспортирующий все функции. Сейчас я использую:
1. MSI-Plus (неюникодный, экспортирует ReadHeader, дергает cbProcessDataProc каждые 1024 байта).
2. Total7zip (юникодный, экспортирует ReadHeaderExW, распаковывает в CloseArchive, поэтому вызывает cbProcessDataProc с отрицательными значениями, поддерживает фоновые операции, диалог настроек).
N. Думаю включить в набор плагин DiskDirExtended (неюникодный, экспортирует ReadHeaderEx).

Я не знаю плагинов, экспортирующих функцию PkSetCryptCallback.
Также я не знаю плагинов, реально вызывающих callback-функцкии из SetChangeVolProc.
Наконец, не помешал бы пример плагина, поддерживающего упаковку в памяти.

_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…


Last edited by MVV on Mon Oct 03, 2016 17:14; edited 8 times in total
Back to top
View user's profile Send private message
Dec



Joined: 07 Sep 2006
Posts: 466

Post (Separately) Posted: Tue Jun 14, 2016 13:20    Post subject: Re: [WCX] Wcx6432: 64-в-32-битный транслятор для WCX плагинов Reply with quote

MVV wrote:
Wcx6432 позволяет использовать 32-битные WCX-плагины в 64-битном ТК.
Красавчик! Уделал меня. Smile

MVV wrote:
Как работает транслятор
Если не секрет, то как реализовал межпроцессорное взаимодействие?

MVV wrote:
Для тестирования всех функций нужен набор плагинов, экспортирующий все функции.
Я когда писал стой вариант, параллельно написал wcx плагин, который экспортировал все функции, его работу проверял в самом TC, а работу своего хоста проверял уже по своему плагину.
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1171
Location: Макеевка

Post (Separately) Posted: Tue Jun 14, 2016 15:07    Post subject: Reply with quote

Круто.
И сразу вопрос - в чём отличие от WCX to WCX64 Wrapper от Rico Elm? Пользуюсь его вариантом уже четыре года, порядка десятка плагинов через него подключены, проблем не наблюдаю.
И размеры, и метод работы схожие (переименовать заглушку и положить её в каталог с плагином).
Взял у автора исходники и доработал или решил с нуля написать свой вариант?

Планируются ли аналогичные решения для других типов плагинов? (wlx, wdx, wfx)
_________________
Windows 11 | TC DreamLair eternal pre-α
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Tue Jun 14, 2016 16:11    Post subject: Reply with quote

Dec wrote:
Если не секрет, то как реализовал межпроцессорное взаимодействие?

Не секрет. Через именованный полнодуплексный канал. А ты в своём каким-то образом задействовал COM-маршалинг?

Dec wrote:
Я когда писал стой вариант, параллельно написал wcx плагин, который экспортировал все функции, его работу проверял в самом TC, а работу своего хоста проверял уже по своему плагину.

Не лишённая смысла мысль... У меня уже появлялась мысль допилить какой-нибудь опенсорсный плагин, добавив нужные функции.
Но одного плагина в любом случае будет мало, т.к. для проверки ВСЕХ функций нужно несколько плагинов (пример с ReadHeader/ReadHeaderEx/ReadHeaderExW в первом посте).

LonerD wrote:
И сразу вопрос - в чём отличие от WCX to WCX64 Wrapper от Rico Elm? Пользуюсь его вариантом уже четыре года, порядка десятка плагинов через него подключены, проблем не наблюдаю.
И размеры, и метод работы схожие (переименовать заглушку и положить её в каталог с плагином).
Взял у автора исходники и доработал или решил с нуля написать свой вариант?

Я помню, был такой, и ещё Гислер просил подождать и не публиковать его слишком рано, но где он сейчас?
Свой я писал с нуля, обсуждение на оффоруме подтолкнуло.

LonerD wrote:
Планируются ли аналогичные решения для других типов плагинов? (wlx, wdx, wfx)

Возможно, т.к. архитектура позволяет. А какие реально нужнее?
С листерными, правда, может быть посложнее, т.к. там идет взаимодействие с окнами. Хуже всего, когда плагин взаимодействует с тоталом в обход интерфейса (например, встраивается в оконную процедуру) - и тут, возможно, листерные будут грешить больше остальных.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…


Last edited by MVV on Tue Jun 14, 2016 16:43; edited 1 time in total
Back to top
View user's profile Send private message
Dec



Joined: 07 Sep 2006
Posts: 466

Post (Separately) Posted: Tue Jun 14, 2016 16:20    Post subject: Reply with quote

MVV wrote:
А ты в своём каким-то образом задействовал COM-маршалинг?
Хост приложение - обычный outproc COM сервер.

MVV wrote:
для проверки ВСЕХ функций нужно несколько плагинов (пример с ReadHeader/ReadHeaderEx/ReadHeaderExW в первом посте).
Не вижу проблем. Как я уже сказал, я писал простенький WCX плагин, который ничего полезного не делал, а просто отдавал содержимое фиксированной директории. При этом плагин реализовывал все функции. Нужно тестировать A-функции, комментирую в исходниках плагина W-экспорт, компилирую, получаю чистый A-плагин. Нужно тестировать W-функции, включаю в исходниках плагина W-экспорт, компилирую, получаю плагин с W-функциональностью.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Tue Jun 14, 2016 16:25    Post subject: Reply with quote

А, комментировал и пересобирал, понятно. Smile


Эх, осознал, что общий клиентский модуль невозможен, придётся объединять Wcx6432.wcx64 и Wcx6432c.dll.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10346
Location: Россия, Саратов

Post (Separately) Posted: Tue Jun 14, 2016 18:15    Post subject: Reply with quote

MVV wrote:
А какие реально нужнее?

Каждому нужно что-то своё, но я бы прочих прочих равных условиях попросил следующими взять WFX.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Wed Jun 15, 2016 00:50    Post subject: Reply with quote

Решил я проблему нескольких одновременно загруженных плагинов, также добавил поддержку функций CanYouHandleThisFile/CanYouHandleThisFileW, теперь архивы с незарегистрированными расширениями тоже должны открываться.


Wcx6432 Beta 124

Теперь 4-й шаг больше не нужен и вообще никогда не существовал. Very Happy

Добавлено спустя 2 часа 32 минуты:

Добавил трансляцию вызовов всех callback-функций, правда, потестировал пока только с cbProcessDataProcW (только что-то у меня шкалы прогресса в тотале не заполнялись во время операции, хотя тотальные callback-функции вызывались с нормальными значениями: -1001, -1, -66, -100 и т.д.).

Wcx6432 Beta 140
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Dec



Joined: 07 Sep 2006
Posts: 466

Post (Separately) Posted: Wed Jun 15, 2016 15:53    Post subject: Reply with quote

На оффоруме человеки жалуются на скорость извлечения MsiPlus. Совпадение, но на этом плагине я изначально тестировал свою поделку. И на сколько я помню, этот плагин очень эмоционален, что проявляется в том, что он вызывает ProcessData callback каждые 8 извлеченных байт. И у меня межпроцессорные callback в таком количестве давали жуткие тормоза. Я сделал хак - в хосте я запоминаю момент последнего вызова callback, и вызываю реальный callback только если с момента предыдущего вызова прошло более 0,5 секунды, или изменилось имя, передаваемое в callback. Разумеется, используется некоторая магия с анализом и запоминанием и инкрементом переданного значения.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Wed Jun 15, 2016 16:56    Post subject: Reply with quote

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

Жесть, конечно, если действительно каждые 8 байт... Там в тестовом архиве файл на 60 МБ.

Добавлено спустя 6 часа 30 минут:

Не, проверил - на каждые 1024 байта, что тоже мало радует. Smile
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Dec



Joined: 07 Sep 2006
Posts: 466

Post (Separately) Posted: Wed Jun 15, 2016 23:37    Post subject: Reply with quote

Наверное, я путаю с просто MSI, который не plus.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Thu Jun 16, 2016 03:22    Post subject: Reply with quote

Доработал синхронизацию между процессами, потребление процессора значительно снизилось.
Также сократил число вызовов прогресс-функции, она вызывается не чаще, чем раз в полсекунды (на имена файлов не смотрю, раз в полсекунды - и точка, а то куча мелких файлов тормозить будет).
И добавил поддержку функции ConfigurePacker.

Wcx6432 Beta 160
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Fri Jun 17, 2016 02:14    Post subject: Reply with quote

Добавил поддержку упаковки и удаления файлов.

Wcx6432 Beta 172

Вопрос прогресс-баров по-прежнему не решён (callback-функция вызывается, но ничего не отображается).
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10346
Location: Россия, Саратов

Post (Separately) Posted: Fri Jun 17, 2016 07:47    Post subject: Reply with quote

MVV
Проверял на старом (но порой всё ещё актуальном в моих условиях) плагине для ещё более старого архиватора HA. Упаковка не работает (сообщение об ошибке при упаковке).
Кроме того, прошу посмотреть, нельзя ли подружить эту методику с моторокеровким Recoder.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.


Last edited by Avada on Fri Jun 17, 2016 12:17; edited 1 time in total
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Fri Jun 17, 2016 11:12    Post subject: Reply with quote

Посмотрю, что можно сделать. Если WCX-интерфейс соблюдается, проблем быть не должно.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group