tyomitch писал(а):Approximator, при чём здесь передача аргументов, если "iswindow возвращает некую странную длинную цифирь"? IsWindow при любых аргументах должна возвращать 1 либо 0; значит, вызывается не она
Нет, не так. Может быть и так, что она вызывается (в этом сомнений быть не может), но возврат из неё происходит не совсем туда. Ниже я буду пояснять про стек и подробнее объясню, что имею ввиду.
tyomitch писал(а):Ещё раз, в скомпилированном виде и в отдельном модуле у меня всё работает просто прекрасно, возвращается 1. Что за траблы у GSerg-а - не знаю. Попробуй, как у тебя?
Сейчас к сожалению не могу проверить (нет возможности штатными средствами смотреть откомилированный код, а на нештатные нет времени).
И потом, то, что эта штука в откомпилированном виде работает у тебя, вовсе не означает, что она обязана работать у всех - компилированный вариант может отличаться, если отличаются настройки компилирования и прочая хрень. Впрочем, ты и сам это знаешь.
Было бы здорово, если бы GSerg выложил бы сюда фрагмент откомпилированного кода, касающийся функции Wrapper1.
tyomitch писал(а):И ещё, поясни мне, какое значение имеет положение esp. Если у Wrapper1 и вызываемой функции (IsWindow) поровну параметров, то VB вообще никак не может заметить подвоха...
Как это какое значение? Дело-то не в VB, а в вызываемой функции. Заметь из Redirect мы в любом случае попадаем в ту процедуру, адрес которой указан. Так что попасть не туда мы не можем в принципе. Однако, чтобы вернуться в то место из которого был вызван Wrapper1 необходимо, чтобы стек содержал, как минимум, адрес возврата (верхнее значение в стеке), как максимум, + все аргументы. На стек указывает значение esp. Достаточно, чтобы до вызова Redirect внутри Wrapper1 значение esp изменялось (к примеру, в некоторых случаях обычным является сохранение значения ebp в стеке), чтобы происходила какая-то белиберда.
Кстати, я же предложил способ проверки. Вызывайте не IsWindow, а свою модульную функцию. Пусть она показывает адрес стека (должен быть такой же, как и во Wrapper1) и его содержимое (всё - от аргументов, до адреса возврата). Это снимет все споры.
С уважением, Approximator.