Q&A

  • RxHook에서 Access Violation이 납니다..ㅠㅠ
<!--CodeS-->
procedure TControlHook.HookWndProc(var AMsg: TMessage);
var
  Handled: Boolean;
begin
  Handled := False;
  if Assigned(FControl) then begin
    if (AMsg.Msg <> WM_QUIT) then NotifyHooks(hoBeforeMsg, AMsg, Handled);
    with AMsg do begin
      if (not Handled) or (Msg = WM_DESTROY) then
        try
          if Assigned(FPrevWndProc) then
            Result := CallWindowProc(FPrevWndProc, FControl.Handle, Msg,
              WParam, LParam)
          else
            Result := CallWindowProc(THack(FControl).DefWndProc,
              FControl.Handle, Msg, WParam, LParam);
        finally
          NotifyHooks(hoAfterMsg, AMsg, Handled);
        end;
      if Msg = WM_DESTROY then begin
        UnhookControl;
        if Assigned(HookList) and not (FDestroying or
          (csDestroying in FControl.ComponentState)) then
          PostMessage(HookList.FHandle, CM_RECREATEWINDOW, 0, Longint(Self));
      end;
    end;
  end;
end;
<!--CodeE-->

이 코드 중에서

<!--CodeS-->
if Assigned(FPrevWndProc) then
Result := CallWindowProc(THack(FControl).DefWndProc,
              FControl.Handle, Msg, WParam, LParam);
<!--CodeE-->

이 부분에서 바이얼레이션이 납니다...

일단 메인 폼과 모달 폼 둘 다 TRxWindowHook 컴포넌트를 써서 처리하는 로직이 있는데요...

두 군데에서 이걸 써서 에러가 나는건지 잘 모르겠네요....

아시는 분 좀 도와주세요~
2  COMMENTS