kkuzil.own@gmail.com
기존의 패치들을 보면 VMT를 얻어서 테이블을 수정하거나 하는 등의 복잡한 방법이지만, 이 새로운 트릭에서는 이러한 구현없이 수정없이 그냥 간단한 구현 유닛을 uses 절 맨 마지막에 추가하는 것만으로 쉽게 해결을 할 수 있습니다.
실질적인 패치 코딩에서도 아주 간단하게 구현을 할 수 있습니다. 따로 패치를 위한 추가적인 코드도 필요없게 됩니다.
unit HVProgressBarVistaFix;
interface
uses Messages, ComCtrls;
type
TProgressBar = class(ComCtrls.TProgressBar) // 이곳의 선언이 이 코드의 핵심. 새로 선언된 아래의 핸들러가 적용됩니다.
private
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd);
message WM_ERASEBKGND;
end;
implementation
procedure TProgressBar.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
DefaultHandler(Message);
end;
end.
사용 방법은
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, HVProgressBarVistaFix;
일반적으로 우리들은 이 문제를 해결하기 위해 TProgressBar를 계승해서 이러쿵저러쿵 해야 한다고 생각할 것입니다. 하지만 유닛 이름을 머리에 붙인 클래스 이름(위의 경우에는 ComCtrls.TProgressBar)을 사용하면 기존의 해당 클래스(위의 경우 TProgressBar)를 치환하는 효과가 일어납니다.
참고하시길.
내용 출처 : http://hallvards.blogspot.com/2007/04/hack16-published-field-rtti-replacement.html
ICMP(Internet Control Message Protocol:인터넷 제어 메세지 프로토콜)
네트워크 내에 발생 할 수 있는 여러 문제를 제어하기 위한 프로토콜.
ICMP 패킷의 대표적인 경우가 ping패킷으로, 특정 호스트가 동작하는지 알아보려고 ping 명령을
통해 대상 호스트로 ping을 보낸다. 이때 ping 패킷을 받은 대상 호스트는 다시 응답 패킷을 보내주는데
이렇게 돌아오는 응답을 통해서 대상 호스트의 동작상태를 확인할 수 있다.
ICMP는 이처럼 데이터 교환이 목적이 아닌, 네트워크 상황/상태를 알아보고 거기에서 발생되는
문제를 처리하기 위해 존재하는 프로토콜이다.