|
MakeObjectInstance에 대해 누가좀 가르쳐 주세요
C++Builder를 이용해 프로그램하면서 Sub-classing이 필요한경우
폼에다가 TWndMethod 형의 메소드를 만들어서
//typedef void __fastcall (__closure *TWndMethod)(Messages::TMessage &Message);
WindowProc를 교체하여서 하곤 했었습니다.
그런데 얼마전 MakeObjectInstance 라는 VCL함수가 있는줄 알게되었습니다.
뭐 아래와 같은식으로 사용되더군요
void *proc;
FARPROC origProc;
void TForm1::SubWndProc(TMessage &msg)
{
...
Msg.Result = CallWindowProc(fProc,Button1->Handle,Msg.Msg,Msg.WParam,Msg.LParam);
};
//----------------------------------------
proc=MakeObjectInstance((SubWndProc);
fProc=SetWindowLong(Button1->Handle, GWL_WNDPROC, (long)proc));
//----------------------------------------
SetWindowLong(Button1->Handle, GWL_WNDPROC, (long)fproc));
FreeObjectInstance(proc);
사용하는 방법을 몰라서 질문 올리는것이 아니라
원리를 알고 싶습니다.
MakeObjectInstance 함수의 소스코드를 보니까
VirtualAlloc 이라는 kernel32.dll에 함수를 쓰더군요
BlockCode[2]={0x59,0xE9}; //0x59 ={ POP ECX } , 0xE9 ={ JMP StdWndProc }
BlockCode 라는 값을 확보한 메모리로 복사하고
StdWndProc와 Offset값을 계산해서 설정하고..
뭐 이것저것 하던데요
실력이 딸려서 정확히 이해하지 못하겠습니다.
누가 MakeObjectInstance 함수에 대해 좀 가르쳐 주세요
왜 그렇게 사용하는지도 함께..
|