Текущий архив: 2011.05.22;
Скачать: CL | DM;
Вниз
getObject - Баг или фича? Найти похожие ветки
← →
SummerWind (2011-02-06 15:25) [0]Всем привет.
Наткнулся на интересный баг, прошу подтвердить, либо опровергнуть мои домыслы.
прикреплен тестовый проект, проверять на Delphi 2010, обязательно с отключенной оптимизацией( это важно )
суть: GetObject возвращает 0 без видимой на то причины.
решение: заменить параметр с Boolean на WordBool ( например ).
смотрел в отладчике в чем разница, единственное что приходит в голову:
1) когда параметр функции Boolean, адрес принимающего буфера нечетный ( например $0012FE83 ) - GetObject возвращает 0.
2) когда меняем параметр функции WordBool( например ) адрес принимающего буфера становится четным ( например $0012FE84 ) и GetObject отрабатывает нормально. ( вообще можно любым способом изменить адрес принимающего буфера, например вставить локальных переменных )
Что это, баг, фича? =)
http://www.sendspace.com/file/e8dmfj
← →
SummerWind (2011-02-06 15:33) [1]первая ссылка - это исправленный проект, где нет бага.
http://www.sendspace.com/file/eqia5c - а здесь баг есть
← →
sniknik © (2011-02-06 15:56) [2]If the function fails, the return value is zero. To get extended error information, call GetLastError.
← →
Dimka Maslov © (2011-02-06 16:00) [3]Типы Boolean и WordBool не являются взаимозаменяемыми. Особенно при передаче параметров по ссылке.
← →
SummerWind (2011-02-06 16:00) [4]спасибо, я читать умею =)
getLastError ничего не показывает.
тут надо обязательно смотреть проект и желательно под отладчиком.
← →
SummerWind (2011-02-06 16:02) [5]
> Типы Boolean и WordBool не являются взаимозаменяемыми. Особенно
> при передаче параметров по ссылке.
в данном случае, как я уже писал выше, это сделано для того, чтобы изменить начальный адрес буфера.
← →
sniknik © (2011-02-06 16:42) [6]> спасибо, я читать умею =)
почему тогда это не отражено в коде? типа думаешь не связано, и справка врет?
> getLastError ничего не показывает.
он и не должен. показывают в кино.
← →
SummerWind (2011-02-06 16:52) [7]
> почему тогда это не отражено в коде?
разве это меняет дело?
> типа думаешь не связано, и справка врет?
зачем миллион лишних вопросов, когда можно просто посмотреть все на примере. если тебе не интересна эта тема, то как бы тогда о чем разговор?
> он и не должен. показывают в кино.
а что-нибудь умное, только по теме можно услышать?
← →
sniknik © (2011-02-06 17:09) [8]> разве это меняет дело?
а то. грамотный код = ошибка, безграмотный = чудо.
все одно что программист vs ламер.
> когда можно просто посмотреть все на примере.
> проверять на Delphi 2010
купи мне 2010-й, посмотрю.
← →
SummerWind (2011-02-06 17:16) [9]всегда поражали такие товарищи =)
это тестовый проект.
да. возможно надо было уточнить, что GetLastError не проясняет ситуацию.
чуть позже я исправился и написал про это.
> купи мне 2010-й, посмотрю.
)) есть еще пожелания?
если тема интересна, то есть как минимум trial.
я понимаю, что ради меня никто не будет ставить ПО. но в таком случае зачем флудить и показывать какой ты устроумный? неужели нет других способов самоутвердиться?
вопрос еще актуален.
← →
sniknik © (2011-02-06 17:32) [10]меня наоборот поражают "товарищи" рассуждающие об ошибках, с домыслами в "красках", "шаманскими" действиями и т.д. со ссылками чуть ли не на барабашку, единственно чего не делающие это собственно анализа ошибки рекомендуемого в хелпе который они говорят читали... нда.
> что GetLastError не проясняет ситуацию.
чуть ранее
> getLastError ничего не показывает.
так ничего "не показывает", или "не проясняет" лично для тебя?
> вопрос еще актуален.
ну, на техническую конференцию, даже в начинающих, он похоже "не тянет".
← →
SummerWind (2011-02-06 17:39) [11]дружок, куда еще закинешь тему? или может просто удалишь? =)
специально для въедливых товарищей поясню - GetLastError показывает последнюю ошибку, которая была до вызова GetObject.
теперь понятно? =)
Страницы: 1 вся ветка
Текущий архив: 2011.05.22;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.009 c