C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[50524] MakeObjectInstance에 대해 누가좀 가르쳐 주세요
장성호 [nasilso] 2289 읽음    2007-09-10 18:01
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 함수에 대해 좀 가르쳐 주세요
왜 그렇게 사용하는지도 함께..

+ -

관련 글 리스트
50524 MakeObjectInstance에 대해 누가좀 가르쳐 주세요 장성호 2289 2007/09/10
50539     Re:MakeObjectInstance에 대해 누가좀 가르쳐 주세요 0 1764 2007/09/12
50547         Re:Re:MakeObjectInstance에 대해... 감사합니다. 장성호 1603 2007/09/13
50576             Re:Re:Re:MakeObjectInstance에 대해... 감사합니다. 0 1599 2007/09/15
50578                 Re:Re:Re:Re:MakeObjectInstance에 대해... 감사합니다. 장성호 1545 2007/09/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.