Q&A

  • win32사용시 이벤트 정의 문제..
제가 지금 WIn32로 프로그램 하나를 개발중인데여..

한가지 난관에 걸려 있습니다.



예를 들면 Win32코드내에 TNMUDP객체를 가져다 쓰고 싶은데 물론 생성까지는 되지만

이런 부분이 걸리 거든여..

예전에 OnDataReceived 부분이 품객체에 일부분이면 가능 하덴데..



---객체를 이용한 코딩

type

TFmMain = class(TForm)

private

{ Private declarations }

public

procedure OnDataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);

end;



begin

aa := TNMUDP.Create(nil);

aa.OnDataReceived := OnDataReceived;

end;



이런 식으로 하면 아무런 문제가 없지만..



---Win32 코딩..



procedure OnDataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);

begin

//무언가 일일 한다.

end;



function WindowProc(Handle : HWND; AMessage, WParam, LParam : Longint) : Longint; Stdcall; Export;

begin

case AMessage of

WM_ACTIVATE: begin

aa := TNMUDP.Create(nil);

aa.OnDataReceived := OnDataReceived;

end;



WM_CREATE : begin

end;



WM_MOUSEMOVE : begin

end;



WM_LBUTTONDOWN : begin

end;



WM_LBUTTONUP : begin

end;



WM_CHAR : begin

case WParam of

27 : DestroyWindow(WinHandle);

end;

end;



WM_DESTROY : begin

UnInitDirectDraw;

PostQuitMessage(0);

end;

end;



WindowProc := DefWindowProc(Handle, AMessage, WParam, LParam);

end;



이런식으로 하면 형식이 틀리다는 메세지를 유발 합니다.

그러니깐 질문에 요지는 Win32코드내에

aa := TNMUDP.Create(nil);

aa.OnDataReceived := OnDataReceived;



식에 객체 생성과 그객체에 이벤트 연결이 불가능 하냐는 거죠..



아시는분 답변좀 주세여..

1  COMMENTS
  • Profile
    델맨 2001.05.24 22:12
    김진호 wrote:

    > 제가 지금 WIn32로 프로그램 하나를 개발중인데여..

    > 한가지 난관에 걸려 있습니다.

    >

    > 예를 들면 Win32코드내에 TNMUDP객체를 가져다 쓰고 싶은데 물론 생성까지는 되지만

    > 이런 부분이 걸리 거든여..

    > 예전에 OnDataReceived 부분이 품객체에 일부분이면 가능 하덴데..

    >

    > ---객체를 이용한 코딩

    > type

    > TFmMain = class(TForm)

    > private

    > { Private declarations }

    > public

    > procedure OnDataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);

    > end;

    >

    > begin

    > aa := TNMUDP.Create(nil);

    > aa.OnDataReceived := OnDataReceived;

    > end;

    >

    > 이런 식으로 하면 아무런 문제가 없지만..

    >

    > ---Win32 코딩..

    >

    > procedure OnDataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);

    > begin

    > //무언가 일일 한다.

    > end;

    >

    > function WindowProc(Handle : HWND; AMessage, WParam, LParam : Longint) : Longint; Stdcall; Export;

    > begin

    > case AMessage of

    > WM_ACTIVATE: begin

    > aa := TNMUDP.Create(nil);

    > aa.OnDataReceived := OnDataReceived;

    > end;

    >

    > WM_CREATE : begin

    > end;

    >

    > WM_MOUSEMOVE : begin

    > end;

    >

    > WM_LBUTTONDOWN : begin

    > end;

    >

    > WM_LBUTTONUP : begin

    > end;

    >

    > WM_CHAR : begin

    > case WParam of

    > 27 : DestroyWindow(WinHandle);

    > end;

    > end;

    >

    > WM_DESTROY : begin

    > UnInitDirectDraw;

    > PostQuitMessage(0);

    > end;

    > end;

    >

    > WindowProc := DefWindowProc(Handle, AMessage, WParam, LParam);

    > end;

    >

    > 이런식으로 하면 형식이 틀리다는 메세지를 유발 합니다.

    > 그러니깐 질문에 요지는 Win32코드내에

    > aa := TNMUDP.Create(nil);

    > aa.OnDataReceived := OnDataReceived;

    >

    > 식에 객체 생성과 그객체에 이벤트 연결이 불가능 하냐는 거죠..

    >

    > 아시는분 답변좀 주세여..



    이문제는 Win32문제라기 보다는 일반 프로시져와 메소드의 차이로 발생하는 문제입니다.

    메소드는 호출될때 다른 인자와 함께 Self를 전달하게 되는데 일반함수에서는 Self가

    없기 때문에 형식이 다르다는 오류가 나오는것입니다. OnDataReceived의 형선언을

    보시면 마지막에 of Object를 붙여 선언되어 있는데 이것이 메소드임을 의미하는것입니다.

    TObject를 상속받은후 이벤트 메소드만을 작성하여 사용하시면 됩니다.