Ты же сам мне рассказывал, что это не WP вызывает крахХакер писал(а):не снятый WP не вызовет крах
Если уж идти не простым, а замысловатым путём, то лучше уж выбрать не такой сверхмутный путь, а стандартный субклассинг. Падений в большинстве случаев вполне можно избежатьХакер писал(а):Например, можно сделать проект так, чтобы под отладкой в IDE использовал этот извратный метод
arthur2 писал(а):Ты же сам мне рассказывал, что это не WP вызывает крах
arthur2 писал(а):Если уж идти не простым, а замысловатым путём, то лучше уж выбрать не такой сверхмутный путь, а стандартный субклассинг.
Я пользуюсь им в том виде, в каком и оставил viewtopic.php?p=6726674#p6726674 Ни какие энды ему не страшны, просто не удалось добиться классического вида winproc. Но и то, что было до этого - с классическим видом wp - тоже почти безопасноХакер писал(а):Или ты с тех пор написал таки плагин для обеспечения безопасных Callback-ов?
На сколько я понмю, его уже нет и он уже даже не значится, но крах всё равно происходит...Хакер писал(а):его уже нет, а он ещё значится
Хакер писал(а):если в своей WP первым же делом снять сабклассинг и вызвать End, то среда всё равно закроется. И это при том, что на момент вызов End'а всё будет в ровно таком же положении, как до установки сабклассинга.
Хакер писал(а):Кроме того, я проверил, возвращается ли выполнение из процедуры, в которой был вызван End, туда, откуда вызвана процедуры и убедился, что не возвращается. Так что возврат в выгруженный код сразу надо исключить.
Хакер писал(а):Под IDE ради одного такого дела городить сабклассинг, вокруг которого городить меры по его безопасному снятию — это чересчур не оправдано.
arthur2 писал(а):На сколько я понмю, его уже нет и он уже даже не значится, но крах всё равно происходит...
Хакер писал(а):Выигрыш в том, что под IDE при внезапном стопе не снятый WP не вызовет крах.
Option Explicit
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public OldWindowProc As Long
Public Function NewWindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Debug.Print msg
NewWindowProc = CallWindowProc(OldWindowProc, hwnd, msg, wParam, lParam)
End Function
Option Explicit
Private Sub Form_Load()
OldWindowProc = SetWindowLong(Command1.hwnd, GWL_WNDPROC, AddressOf NewWindowProc)
End Sub
arthur2 писал(а):И тем не менее - проект не сдохнет ни по закрытии окна, ни по стопу
Хакер писал(а):и который, о чудо, пару раз отработал и не вызвал крах
arthur2 писал(а):Этот код не умирает, потому что на момент стопа ничего внутри WP не происходит.
arthur2 писал(а):Ты говорил о том, что возврат в выгруженный код - как причину краха - нужно исключить.
исключить - как причину краха. Исключить из списка возможных причин краха. Исключить не код, а возврат в код.Хакер писал(а):Откуда нужно исключить выгруженный код?
Сейчас этот форум просматривают: AhrefsBot и гости: 94