FsGetPreviewBitmap в FS плагинах

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

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

Hram
Сообщения: 113
Зарегистрирован: Чт май 19, 2005 20:14
Откуда: Питер

Сообщение Hram »

Просто у меня есть подозрение, что дело не в ТС и не в плагине
Опыт подсказывает, что проблема гдето на поверхности, но мы не там смотрим.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

Hram писал(а):Просто у меня есть подозрение, что дело не в ТС и не в плагине
А в чем? Хардвер отметаем, так? Тогда остается только Windows. Ты предлагаешь обратиться к Билли?
Hram писал(а):Опыт подсказывает, что проблема гдето на поверхности, но мы не там смотрим.
А опыт не подсказывает куда надо смотреть? :wink:
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Решение было найдено? Стал добавлять функцию в свой плагин, тоже наткнулся на эту бяку. Функция не вызывается.
Стоит Windows 2003 Enterprise. Delphi 7. Топик на оффоруме прочёл, там ничего полезного нет.
Hram
Сообщения: 113
Зарегистрирован: Чт май 19, 2005 20:14
Откуда: Питер

Сообщение Hram »

Решение одно - ждать когда Гислер исправит баг.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

Гислер пока даже не подтвердил, что может воспроизвести этот баг. А пока не воспроизведет чинить, естессно, не будет. D1P, ты бы отметился на оффоруме тоже. Может, с увеличением числа плакальщиков Гислер активизируется.
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Стал разбираться с багой. Написал простенький код для загрузки функции из плагина, оказалось, что она попросту не находится. Функция GetProcAddress не возвращает её адрес.

Проверяющее приложение вместе с исходниками можно взять тут: http://super.wincmd.ru/_tmp/FsGetPreviewBitmapTest.rar
Код очевиден и в комментировании не нуждается.

Запостил на оффоруме то же самое.
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Стал экспериментировать. Заменил в подопытном плагине описание функции с

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

function FsGetPreviewBitmap(RemoteName:pchar;width,height:integer; var ReturnedBitmap:HBitmap):integer; stdcall;
на

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

function FsGetPreviewBitmap(RemoteName:pchar;width,height:integer):integer; stdcall;
и функция стала находиться. Предварительный вывод: что-то не так с функциями, в которые параметры передаются по ссылке.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

D1P писал(а):оказалось, что она попросту не находится.
Странно, у меня находится. И твоя программа на моих компах прекрасно работает. Написал свою на С++, тоже все находит.
D1P писал(а):Предварительный вывод: что-то не так с функциями, в которые параметры передаются по ссылке.
Ну не знаю, как в дельфях, но на С++ первый параметр (RemoteName) тоже является ссылкой.
Выложи куда-нить плагин, в котором GetProcAddress не может найти FsGetPreviewBitmap. Хочется глянуть своими средствами.
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

VadiMGP писал(а):Ну не знаю, как в дельфях, но на С++ первый параметр (RemoteName) тоже является ссылкой.
В дельфях тоже. Вернее, это указатель, в принципе монопенисуально, что так, что эдак (через var)). Но HBitmap - это LongWord, посему его только через VAR и можно предать. Если я, в порядке эксперимента, var в отладчике убираю - функция видится.
VadiMGP писал(а):Выложи куда-нить плагин, в котором GetProcAddress не может найти FsGetPreviewBitmap. Хочется глянуть своими средствами.
http://super.wincmd.ru/twinamp3/TWinamp3_FGPBT.rar
Исходники и бинарник внутри.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

Архив битый. Дважды скачивал, но wfx извлечь не могу.
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Возьми тогда ссылки из этого поста.
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Сейчас попробовал тот же код на работе (Delphi 7, XP SP2) - всё заработало...

Попозже, как разгребу основную работу, поэкспериментирую ещё.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

D1P
Проверил на ХР и 2000. Нулевой результат, все работает. И твоя и моя тестовые программы нормально находят FsGetPreviewBitmap в твоем плагине. Имена экспортированы "чистые", недекорированные, то есть, по идее, параметры никак не должны влиять.
Больше никаких идей нету.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

D1P
Кстати, а что у тебя возвращает GetLastError когда GetProcAddress не находит функцию?
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

VadiMGP писал(а):Кстати, а что у тебя возвращает GetLastError когда GetProcAddress не находит функцию?
Доберусь домой - посмотрю.

В любом случае, теперь я смогу нормально реализовать и отладить функцию, а будет она или не будет вызываться - уже не мои грехи. Я, честно говоря, не знаю, есть ли FS-плагины уже реализовавшие эту возможность... Видимо их нет, потому что наверняка бы были багрепорты от пользователей, у которых функция бы не работала.
Так что мой плагин рискует тут стать первым =)
Ответить