C++ в Visual Studio 2008
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Написание плагинов для Total Commander

#1: C++ в Visual Studio 2008 Author: VSBLocation: Новгород PostPosted: Mon Jul 12, 2010 02:23
    —
Хочу написать WCX плагин на с++, IDE - MS VS 2008
Проблема: функции из плагина не вызываются вообще, даже GetPackerCaps()

Вот ткма на англ форуме
http://www.ghisler.ch/board/viewtopic.php?t=26840
Что делать?

#2:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jul 12, 2010 07:28
    —
Я скачал твои исходники, посмотрю, вчера не успел просто.


Короче, насколько я понял, при попытке тотала вызывать GetPackerCaps возникает какая-то ошибка, и он выгружает плагин, а в packer caps ставит 0. Осталось разобраться, почему. Я уже и переключать в Multi-Threaded Debug пробовал, все равно.

Кстати, GetPackerCaps тотал вызывает не при установке плагина, а при открытии диалога упаковки файлов.

#3:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jul 12, 2010 09:25
    —
Ага, у тебя в .def-файле не хватало CloseArchive. Как только я добавил ее, сразу все заработало.

#4:  Author: VSBLocation: Новгород PostPosted: Mon Jul 12, 2010 10:56
    —
Точно, спасибо!

Отписался подробнее в той теме

#5:  Author: МоторокерLocation: г. Пермь (читается Перьмь) PostPosted: Mon Jul 12, 2010 12:25
    —
Список обязательный функций перечислен в writer's reference. Я тоже на чём-то подобном споткнулся, когда начинал писать:
http://www.motorocker.ru/wcx_writers_reference.htm
http://www.motorocker.ru/wcx.dpr.htm

Они должны быть обязательно, даже если не используются.

#6:  Author: VSBLocation: Новгород PostPosted: Mon Jul 12, 2010 12:47
    —
Всё равно не работает.
Может надо как то по особому экспортировать?

#7:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jul 12, 2010 13:08
    —
VSB wrote:
Всё равно не работает.
Может надо как то по особому экспортировать?

Я в теме на оффоруме написал, что у тебя еще не хватает функции ReadHeader.

#8:  Author: VSBLocation: Новгород PostPosted: Mon Jul 12, 2010 13:17
    —
MVV

Кстати, в гайде ошибка по поводу ReadHeaderEx

Quote:
The following functions of the packer plugin interface support Unicode:

OpenArchiveW
ReadHeaderExW
ProcessFileW
SetChangeVolProcW
SetProcessDataProcW
PackFilesW
DeleteFilesW
StartMemPackW
CanYouHandleThisFileW

The following functions do not exist in a Unicode form and must be implemented as Ansi:

ReadHeader - use ReadHeaderEx
CloseArchive
GetPackerCaps
ConfigurePacker
PackToMem
DoneMemPack
PackSetDefaultParams
ReadHeaderEx

#9:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jul 12, 2010 13:19
    —
Да, действительно, недочетик. Отписался на оффоруме в теме про описания интерфейсов.

#10:  Author: VSBLocation: Новгород PostPosted: Mon Jul 12, 2010 13:23
    —
Кстати, почему обязателен экспорт через EXPORTS и никак через __declspec(dllexport) в декорированом виде?

#11:  Author: VSBLocation: Новгород PostPosted: Mon Jul 12, 2010 13:25
    —
И еще, хотелось бы в гайде видеть также порядок вызовов функций для разных сценариев

#12:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jul 12, 2010 14:50
    —
VSB wrote:
Кстати, почему обязателен экспорт через EXPORTS и никак через __declspec(dllexport) в декорированом виде?

Во-первых, у разных компиляторов декорирование различно - причем, оно может быть различным даже для разных версий одного компилятора - ГОСТа на декорирование не существует. Smile
Во-вторых, неважно, какое имя, лишь бы оно было одинаковым для всех плагинов, чтобы можно было легко и быстро получить адрес функции, используя GetProcAddress.
В-третьих, куда приятнее видеть в списке экспортируемых функций читабельные имена, а не кракозябры.
В-четвертых, уже не один десяток лет такая схема используется в ТК.
А экспортировать вроде можно не только через .def-файл (была кажется и какая-то директива для экспорта функции с недекорированным именем).

VSB wrote:
И еще, хотелось бы в гайде видеть также порядок вызовов функций для разных сценариев

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

#13:  Author: VSBLocation: Новгород PostPosted: Mon Jul 12, 2010 16:14
    —
Причем тут пример?
просто для отладки полезно знать в каком порядке TC будет вызывать функции

#14:  Author: VSBLocation: Новгород PostPosted: Mon Jul 12, 2010 20:01
    —
А есть ли для VC++ замена этого
http://docwiki.embarcadero.com/RADStudio/en/Path_Manipulation_Routines

#15:  Author: VSBLocation: Новгород PostPosted: Tue Jul 13, 2010 02:17
    —

#16:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jul 13, 2010 07:17
    —
Просто ставишь в релизе 'Multi-threaded'-библиотеку вместо 'Multi-threaded DLL'.

Ну и дописываешь в любом месте любого .cpp-файла, если ругается на отсутствие функции main (придурки, до сих пор не могут исправить свои библиотеки, чтобы они не требовали main-функцию в DLL):
Code:
#ifdef _DEBUG
void main() { }
#endif

Линкеру нужно лишь, чтобы была функция с таким именем - а что она делает, ему абсолютно до фонаря.

#17:  Author: VSBLocation: Новгород PostPosted: Tue Jul 13, 2010 10:43
    —
MVV wrote:
придурки, до сих пор не могут исправить свои библиотеки, чтобы они не требовали main-функцию в DLL


Может в msvcrt100 исправили.
Попробую потом

#18:  Author: VSBLocation: Новгород PostPosted: Tue Aug 17, 2010 23:28
    —
А можно ли положить в одну DLL COM-сервер и функции, его использующие?

#19:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Aug 18, 2010 10:10
    —
ТАМ я уже ответил. Отвечу и здесь. Если библиотека-плагин, неважно, что в нее понапихано, экспортирует необходимые тоталу функции - плагин работать будет.

#20:  Author: itsania PostPosted: Mon Nov 28, 2011 13:12
    —
Подскажите пожалуйста где взять исходник опции Total Comander "Mark/Save selection to file



Total Commander -> Написание плагинов для Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group