제가 지금 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로 프로그램 하나를 개발중인데여..
> 한가지 난관에 걸려 있습니다.
>
> 예를 들면 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를 상속받은후 이벤트 메소드만을 작성하여 사용하시면 됩니다.