Страница 4 из 5

Добавлено: Чт окт 25, 2007 22:24
Hram
Просто у меня есть подозрение, что дело не в ТС и не в плагине
Опыт подсказывает, что проблема гдето на поверхности, но мы не там смотрим.

Добавлено: Чт окт 25, 2007 23:40
VadiMGP
Hram писал(а):Просто у меня есть подозрение, что дело не в ТС и не в плагине
А в чем? Хардвер отметаем, так? Тогда остается только Windows. Ты предлагаешь обратиться к Билли?
Hram писал(а):Опыт подсказывает, что проблема гдето на поверхности, но мы не там смотрим.
А опыт не подсказывает куда надо смотреть? :wink:

Добавлено: Ср ноя 14, 2007 01:42
D1P
Решение было найдено? Стал добавлять функцию в свой плагин, тоже наткнулся на эту бяку. Функция не вызывается.
Стоит Windows 2003 Enterprise. Delphi 7. Топик на оффоруме прочёл, там ничего полезного нет.

Добавлено: Ср ноя 14, 2007 07:44
Hram
Решение одно - ждать когда Гислер исправит баг.

Добавлено: Ср ноя 14, 2007 10:02
VadiMGP
Гислер пока даже не подтвердил, что может воспроизвести этот баг. А пока не воспроизведет чинить, естессно, не будет. D1P, ты бы отметился на оффоруме тоже. Может, с увеличением числа плакальщиков Гислер активизируется.

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

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

Запостил на оффоруме то же самое.

Добавлено: Ср ноя 14, 2007 14:44
D1P
Стал экспериментировать. Заменил в подопытном плагине описание функции с

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

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

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

function FsGetPreviewBitmap(RemoteName:pchar;width,height:integer):integer; stdcall;
и функция стала находиться. Предварительный вывод: что-то не так с функциями, в которые параметры передаются по ссылке.

Добавлено: Ср ноя 14, 2007 16:36
VadiMGP
D1P писал(а):оказалось, что она попросту не находится.
Странно, у меня находится. И твоя программа на моих компах прекрасно работает. Написал свою на С++, тоже все находит.
D1P писал(а):Предварительный вывод: что-то не так с функциями, в которые параметры передаются по ссылке.
Ну не знаю, как в дельфях, но на С++ первый параметр (RemoteName) тоже является ссылкой.
Выложи куда-нить плагин, в котором GetProcAddress не может найти FsGetPreviewBitmap. Хочется глянуть своими средствами.

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

Добавлено: Ср ноя 14, 2007 23:19
VadiMGP
Архив битый. Дважды скачивал, но wfx извлечь не могу.

Добавлено: Чт ноя 15, 2007 03:52
D1P
Возьми тогда ссылки из этого поста.

Добавлено: Чт ноя 15, 2007 11:39
D1P
Сейчас попробовал тот же код на работе (Delphi 7, XP SP2) - всё заработало...

Попозже, как разгребу основную работу, поэкспериментирую ещё.

Добавлено: Чт ноя 15, 2007 11:49
VadiMGP
D1P
Проверил на ХР и 2000. Нулевой результат, все работает. И твоя и моя тестовые программы нормально находят FsGetPreviewBitmap в твоем плагине. Имена экспортированы "чистые", недекорированные, то есть, по идее, параметры никак не должны влиять.
Больше никаких идей нету.

Добавлено: Чт ноя 15, 2007 11:53
VadiMGP
D1P
Кстати, а что у тебя возвращает GetLastError когда GetProcAddress не находит функцию?

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

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