C++ в Visual Studio 2008

Только для тех, кто пишет плагины под Total Commander. Обмен опытом, решение проблем.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

VSB
Сообщения: 37
Зарегистрирован: Чт фев 03, 2005 17:19
Откуда: Новгород

C++ в Visual Studio 2008

Сообщение VSB »

Хочу написать WCX плагин на с++, IDE - MS VS 2008
Проблема: функции из плагина не вызываются вообще, даже GetPackerCaps()

Вот ткма на англ форуме
http://www.ghisler.ch/board/viewtopic.php?t=26840
Что делать?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Я скачал твои исходники, посмотрю, вчера не успел просто.


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

Кстати, GetPackerCaps тотал вызывает не при установке плагина, а при открытии диалога упаковки файлов.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Ага, у тебя в .def-файле не хватало CloseArchive. Как только я добавил ее, сразу все заработало.
VSB
Сообщения: 37
Зарегистрирован: Чт фев 03, 2005 17:19
Откуда: Новгород

Сообщение VSB »

Точно, спасибо!

Отписался подробнее в той теме
Аватара пользователя
Моторокер
Сообщения: 1517
Зарегистрирован: Пт май 06, 2005 08:22
Откуда: г. Пермь (читается Перьмь)
Контактная информация:

Сообщение Моторокер »

Список обязательный функций перечислен в writer's reference. Я тоже на чём-то подобном споткнулся, когда начинал писать:
http://www.motorocker.ru/wcx_writers_reference.htm
http://www.motorocker.ru/wcx.dpr.htm

Они должны быть обязательно, даже если не используются.
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
VSB
Сообщения: 37
Зарегистрирован: Чт фев 03, 2005 17:19
Откуда: Новгород

Сообщение VSB »

Всё равно не работает.
Может надо как то по особому экспортировать?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

VSB писал(а):Всё равно не работает.
Может надо как то по особому экспортировать?
Я в теме на оффоруме написал, что у тебя еще не хватает функции ReadHeader.
VSB
Сообщения: 37
Зарегистрирован: Чт фев 03, 2005 17:19
Откуда: Новгород

Сообщение VSB »

MVV

Кстати, в гайде ошибка по поводу ReadHeaderEx
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
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Да, действительно, недочетик. Отписался на оффоруме в теме про описания интерфейсов.
VSB
Сообщения: 37
Зарегистрирован: Чт фев 03, 2005 17:19
Откуда: Новгород

Сообщение VSB »

Кстати, почему обязателен экспорт через EXPORTS и никак через __declspec(dllexport) в декорированом виде?
VSB
Сообщения: 37
Зарегистрирован: Чт фев 03, 2005 17:19
Откуда: Новгород

Сообщение VSB »

И еще, хотелось бы в гайде видеть также порядок вызовов функций для разных сценариев
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

VSB писал(а):Кстати, почему обязателен экспорт через EXPORTS и никак через __declspec(dllexport) в декорированом виде?
Во-первых, у разных компиляторов декорирование различно - причем, оно может быть различным даже для разных версий одного компилятора - ГОСТа на декорирование не существует. :)
Во-вторых, неважно, какое имя, лишь бы оно было одинаковым для всех плагинов, чтобы можно было легко и быстро получить адрес функции, используя GetProcAddress.
В-третьих, куда приятнее видеть в списке экспортируемых функций читабельные имена, а не кракозябры.
В-четвертых, уже не один десяток лет такая схема используется в ТК.
А экспортировать вроде можно не только через .def-файл (была кажется и какая-то директива для экспорта функции с недекорированным именем).
VSB писал(а):И еще, хотелось бы в гайде видеть также порядок вызовов функций для разных сценариев
Что видеть в гайде - лучше пиши сразу Гислеру здесь. А вообще, есть же примеры плагинов с открытыми исходниками. Было бы желание разобраться в них.
VSB
Сообщения: 37
Зарегистрирован: Чт фев 03, 2005 17:19
Откуда: Новгород

Сообщение VSB »

Причем тут пример?
просто для отладки полезно знать в каком порядке TC будет вызывать функции
VSB
Сообщения: 37
Зарегистрирован: Чт фев 03, 2005 17:19
Откуда: Новгород

Сообщение VSB »

А есть ли для VC++ замена этого
http://docwiki.embarcadero.com/RADStudi ... n_Routines
VSB
Сообщения: 37
Зарегистрирован: Чт фев 03, 2005 17:19
Откуда: Новгород

Сообщение VSB »

Так, вроде нашел
http://msdn.microsoft.com/en-us/library ... S.85).aspx
Теперь осталось разобраться со статической линковкой msvcrt
Ответить