Q&A

  • SendMessage Data 읽기.
VC++의 DLL에서

SendMessage(HANDLE hWindow, UNIT msg, char *data, long len);

로 메세지를 받고, 여기에서

3번째 파라메타는 읽고자하는 버퍼이고,

4번째 파라메타는 버퍼의 길이 입니다.



여기서 받은 메세지를 이용해서 버퍼자료를 읽어야 하는데

어떻게 해야할지........



많은 조언을 부탁드립니다.



3  COMMENTS
  • Profile
    최용일 2000.07.25 00:37
    안녕하세요. 최용일입니다.



    메세지에 반응하는 이벤트를 만드세요.



    TForm1 = class(TForm)

    ...

    procedure 함수이름(메세지구조체 var파라매터); message 메세지이름(msg)

    ...

    end;



    procedure TForm1.함수이름(메세지구조체 var파라매터);

    // 메세지구조체는 TMessage를 사용해도 되고 이것과 크기가 같은 다른 구조체 레코드를

    // 정의해서 사용해도 됩니다.

    begin

    // TMessage구조체를 사용할 경우 WParam필드에 버퍼(char *data)가 들어가고 LParam에

    // 버퍼의 길이(long len)가 들어갑니다.

    // 버퍼는 적당히 형변환해서 사용하시며 되구요...

    end;



    ^^ 항상 즐코하세요.



    박성일 wrote:

    > VC++의 DLL에서

    > SendMessage(HANDLE hWindow, UNIT msg, char *data, long len);

    > 로 메세지를 받고, 여기에서

    > 3번째 파라메타는 읽고자하는 버퍼이고,

    > 4번째 파라메타는 버퍼의 길이 입니다.

    >

    > 여기서 받은 메세지를 이용해서 버퍼자료를 읽어야 하는데

    > 어떻게 해야할지........

    >

    > 많은 조언을 부탁드립니다.

    >

  • Profile
    박성일 2000.07.25 00:38
    감사합니다.



    그런데....



    WParam필드에 들어있는 char *data를 사용하기 위해서 어떻게 형변환을 해야 하는지??



    부탁드립니다.







    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > 메세지에 반응하는 이벤트를 만드세요.

    >

    > TForm1 = class(TForm)

    > ...

    > procedure 함수이름(메세지 구조체파라매터); message 메세지이름(msg)

    > ...

    > end;

    >

    > procedure TForm1.함수이름(메세지구조체);

    > // 메세지구조체는 TMessage를 사용해도 되고 이것과 크기가 같은 다른 구조체 레코드를

    > // 정의해서 사용해도 됩니다.

    > begin

    > // TMessage구조체를 사용할 경우 WParam필드에 버퍼(char *data)가 들어가고 LParam에

    > // 버퍼의 길이(long len)가 들어갑니다.

    > // 버퍼는 적당히 형변환해서 사용하시며 되구요...

    > end;

    >

    > ^^ 항상 즐코하세요.

    >

    > 박성일 wrote:

    > > VC++의 DLL에서

    > > SendMessage(HANDLE hWindow, UNIT msg, char *data, long len);

    > > 로 메세지를 받고, 여기에서

    > > 3번째 파라메타는 읽고자하는 버퍼이고,

    > > 4번째 파라메타는 버퍼의 길이 입니다.

    > >

    > > 여기서 받은 메세지를 이용해서 버퍼자료를 읽어야 하는데

    > > 어떻게 해야할지........

    > >

    > > 많은 조언을 부탁드립니다.

    > >

  • Profile
    최용일 2000.07.25 00:54
    안녕하세요. 최용일입니다.



    그건 사용하고자 하는 버퍼형에 따라서 달라지는데요....



    버퍼를 포인터로 정의하면



    var

    Buffer: Pointer;

    begin

    Buffer := Pointer(메세지파라매터.WParam);

    end;



    버퍼를 배열로 정의하면



    type

    TBuffer = array[0..버퍼크기] of Byte;

    var

    Buffer: TBuffer;

    begin

    Buffer := TBuffer(Pointer(메세지파라매터.WParam)^);

    end;



    버퍼를 배열의 포인터로 정의하면



    type

    PBuffer = ^TBuffer;

    TBuffer = array[0..버퍼크기] of Byte;

    var

    Buffer: PBuffer;

    begin

    Buffer := PBuffer(메세지파라매터.WParam);

    end;



    버퍼를 PChar(널종료문자열)로 정의하면



    var

    Buffer: PChar;

    begin

    Buffer := PChar(메세지파라매터.WParam);

    end;



    이런식이 되겠죠...



    ^^ 항상 즐코하세요.



    박성일 wrote:

    > 감사합니다.

    >

    > 그런데....

    >

    > WParam필드에 들어있는 char *data를 사용하기 위해서 어떻게 형변환을 해야 하는지??

    >

    > 부탁드립니다.

    >

    >

    >

    > 최용일 wrote:

    > > 안녕하세요. 최용일입니다.

    > >

    > > 메세지에 반응하는 이벤트를 만드세요.

    > >

    > > TForm1 = class(TForm)

    > > ...

    > > procedure 함수이름(메세지 구조체파라매터); message 메세지이름(msg)

    > > ...

    > > end;

    > >

    > > procedure TForm1.함수이름(메세지구조체);

    > > // 메세지구조체는 TMessage를 사용해도 되고 이것과 크기가 같은 다른 구조체 레코드를

    > > // 정의해서 사용해도 됩니다.

    > > begin

    > > // TMessage구조체를 사용할 경우 WParam필드에 버퍼(char *data)가 들어가고 LParam에

    > > // 버퍼의 길이(long len)가 들어갑니다.

    > > // 버퍼는 적당히 형변환해서 사용하시며 되구요...

    > > end;

    > >

    > > ^^ 항상 즐코하세요.

    > >

    > > 박성일 wrote:

    > > > VC++의 DLL에서

    > > > SendMessage(HANDLE hWindow, UNIT msg, char *data, long len);

    > > > 로 메세지를 받고, 여기에서

    > > > 3번째 파라메타는 읽고자하는 버퍼이고,

    > > > 4번째 파라메타는 버퍼의 길이 입니다.

    > > >

    > > > 여기서 받은 메세지를 이용해서 버퍼자료를 읽어야 하는데

    > > > 어떻게 해야할지........

    > > >

    > > > 많은 조언을 부탁드립니다.

    > > >