Q&A

  • 다른 별개의 모듈에서 보낸 메세지를 내 프로그램에서 캐치하기...
안녕하세요.
갑자기 날씨가 쌀쌀해 졌죠.
다시 겨울이 오려는지... -.-;

다름이 아니오라
다른 dll에 있는 function에서 현재의 상태를 메세지로 발생시키면
내 프로그램에서는 그것을 캐치해서 적당한 처리를 해주려고 합니다.

어떻게 해야될는지 알 수 가 없네요.

원래는 비주얼베이직으로 작성되었는데 델파이로 구현하고 있는 중입니다.
상수는 아래와 같구요

//상태를 나타내는 상수입니다.
Const
    WM_RECEIVEDATA = (WM_USER + 10);

    MSG_RCVCALL = 1001;
    MSG_RCVSMS = 1002;
    MSG_RCVRING = 1003;
    MSG_CONERROR = 1004;

DLL에서 위의 메세지를 발생시키면 만들고 있는 프로그램에서 캐치를 해서 적당한 처리를 해 주어야 하는데 잘 모르겠습니다.

그리고 또 한가지 WM_USER란건 뭔지....


마감 날짜는 다가 오고 미티겠습니다.
부디 불쌍한 중생을 구원해 주십시오. -.-;


2  COMMENTS
  • Profile
    홍성락 2003.04.24 11:00
    넘기는 메세지가 일반 TMessage형인지 아니면 다른 변수나 구조체인지는 모르겠네요
    그건 함두 원형을 봐야겠네요

    일단 선언시
    procedure MsgRECEIVEDATA(var msg: TMessage); message WM_RECEIVEDATA;
    그리고 WM_USER는 어플리케이션(시스템)이 사용하는 메세지번호 마지막 다음 사용자가 사용하는 번호의 시작입니다.
    hsr//////////////////////////////////////////////////
  • Profile
    유창원 2003.04.24 21:10
    //상수선언
    const
            WM_RECEIVEDATA = (WM_USER + 10);

            MSG_RCVCALL = 1001;
            MSG_RCVSMS = 1002;
            MSG_RCVRING = 1003;
            MSG_CONERROR = 1004;

    //변수선언
    var
        OldWinProc : Integer;  //<==얘는 LongInt로 잡아야 하나요?


    function NewWinProc(hWnd: HWND; Msg: WORD; wParam: WORD; lParam: LONGINT): LONGINT; StdCall;
    begin
            If Msg = WM_RECEIVEDATA Then begin
                    Case wParam of
                            MSG_RCVCALL :
                            begin
                                    ShowMessage('MSG_RCVCALL');
                            end;
                            MSG_RCVSMS :
                            begin
                                    ShowMessage('MSG_RCVSMS');
                            end;
                            MSG_RCVRING :
                            begin
                                    if lParam = 1 then
                                            ShowMessage(GetCallID + ' -  Ringing')
                                    else if lParam = 2 then
                                            ShowMessage('Ringing')
                                    else if lParam = 3 then
                                            ShowMessage('Ringing')
                                    else
                                            ShowMessage('...');
                            end;
                            MSG_CONERROR :
                            begin
                                    ShowMessage('MSG_CONERROR');
                            end;
                    end;
            end
            else begin
                    ShowMessage('무슨 메세지?');  
                    Result := CallWindowProc(Pointer(OldWinProc), hWnd, Msg, wParam, lParam);    
            end;
    end;


    //Form이 생성될 때
    procedure TSMSServerMainForm.FormCreate(Sender: TObject);
    begin
            OldWinProc := SetWindowLong(Handle, GWL_WNDPROC, LongInt(@NewWinProc));
    end;


    //폼이 Destroy될때
    procedure TSMSServerMainForm.FormDestroy(Sender: TObject);
    begin
            if OldWinProc <> 0 then
                    SetWindowLong(Handle, GWL_WNDPROC, OldWinProc);
    end;


    ==================
    위와 같이 코딩을 했는데 에러메세지가 뭐로 나오냐하면 "창에 스크롤바가 없습니다."라고 한번이 나오고 다음은 계속 "잘못된 창핸들입니다. ErrorCode : 1400"이라고 메세지가 나옵니다.

    그리고 DLL에 있는 function에서 어떤 식으로 메세지를 보내주는지 알 수가 없습니다. 참고할 것은 제공해주는 함수 목록과 위에서 정의한 상수밖에 엄서요.
    ㅜ.ㅜ
    어떻게 해야 될지 모르겠네요.