Q&A

  • sendmessage에관한 질문
비쥬얼씨뿔의 콘솔어플리케이션으로 짠 프로그램과 델파이로 짠 프로그램간에

데이터를 주고 받을려고하는데(비쥬얼씨뿔에서는 주고 델파이에서 받고)

비쥬얼씨뿔책에서는 sendmessage함수로는 다른프로그램간에는 정보교류를

할 수 없다고 나왔는데 어떻게 델파이에서는 다른프로그램간에도 데이터를

주고 받을 수 있죠?

비쥬얼씨뿔책이 잘못된건가요?

밑에 소스가 있는데요. 컴파일에러는 없습니다. 그런데

델파이부분에서

PCopyDataStruct(wpMessage.lParam)^.dwData

CopyMemory(@data, PCopyDataStruct(wpMessage.lParam)^.lpData

.dwData,.lpData에 Inaccessible Value라는 에러가 뜨던데요.

델파이끼리는 에러가 않나거든요. 비쥬얼씨뿔에서 보내서 그런가요?





비쥬얼씨뿔로 데이타줄때

//--------------------------------------------------------------------------

struct TData {

char *TmpStr;

} TmpData;



COPYDATASTRUCT TmpCopyData;



UINT MsgHandle;

MsgHandle = ::RegisterWindowMessage("TelephoNeS");

TmpCopyData.dwData = MsgHandle;

TmpData.TmpStr = "give your offered load (a>0): ";

TmpCopyData.cbData = sizeof(TmpData);

TmpCopyData.lpData = &TmpData;

::SendMessage(HWND_BROADCAST,MsgHandle, NULL, LPARAM(&TmpCopyData));



델파이에서 데이타를 받을때

//-----------------------------------------------------------------------

procedure TForm1.FormCreate(Sender: TObject);

begin



f_my_Messagehandle := RegisterWindowMessage('TelephoNeS');

end;



procedure TForm1.WndProc(var wpMessage: TMessage);

var

DataStruct : TCopyDataStruct;

Data: TData;

begin

If (wpMessage.Msg = f_my_MessageHandle) Then

// (PCopyDataStruct(wpMessage.lParam)^.dwData = f_my_Messagehandle) Then

begin

CopyMemory(@data, PCopyDataStruct(wpMessage.lParam)^.lpData, SizeOf(TData));

wpMessage.Result := 1;



If StrToInt(Copy(Data.s,1,1)) = 1 Then

Begin

memo1.lines.add(Copy(Data.s,1,Length(Data.s)-1));

End Else

If StrToInt(Copy(Data.s,1,1)) = 2 Then

Begin

memo2.lines.add(Copy(Data.s,1,Length(Data.s)-1));

End;

end

else

inherited WndProc(wpMessage);

end;

1  COMMENTS
  • Profile
    호야 2000.10.05 02:08
    비쥬얼씨뿔에서 데이터주고 델파이에서 받을 수 있는데

    이상하게 익스플로러가 실행이 되네요.

    같은 핸들이 셋이라는 얘긴가요?



    호야 wrote:

    > 비쥬얼씨뿔의 콘솔어플리케이션으로 짠 프로그램과 델파이로 짠 프로그램간에

    > 데이터를 주고 받을려고하는데(비쥬얼씨뿔에서는 주고 델파이에서 받고)

    > 비쥬얼씨뿔책에서는 sendmessage함수로는 다른프로그램간에는 정보교류를

    > 할 수 없다고 나왔는데 어떻게 델파이에서는 다른프로그램간에도 데이터를

    > 주고 받을 수 있죠?

    > 비쥬얼씨뿔책이 잘못된건가요?

    > 밑에 소스가 있는데요. 컴파일에러는 없습니다. 그런데

    > 델파이부분에서

    > PCopyDataStruct(wpMessage.lParam)^.dwData

    > CopyMemory(@data, PCopyDataStruct(wpMessage.lParam)^.lpData

    > .dwData,.lpData에 Inaccessible Value라는 에러가 뜨던데요.

    > 델파이끼리는 에러가 않나거든요. 비쥬얼씨뿔에서 보내서 그런가요?

    >

    >

    > 비쥬얼씨뿔로 데이타줄때

    > //--------------------------------------------------------------------------

    > struct TData {

    > char *TmpStr;

    > } TmpData;

    >

    > COPYDATASTRUCT TmpCopyData;

    >

    > UINT MsgHandle;

    > MsgHandle = ::RegisterWindowMessage("TelephoNeS");

    > TmpCopyData.dwData = MsgHandle;

    > TmpData.TmpStr = "give your offered load (a>0): ";

    > TmpCopyData.cbData = sizeof(TmpData);

    > TmpCopyData.lpData = &TmpData;

    > ::SendMessage(HWND_BROADCAST,MsgHandle, NULL, LPARAM(&TmpCopyData));

    >

    > 델파이에서 데이타를 받을때

    > //-----------------------------------------------------------------------

    > procedure TForm1.FormCreate(Sender: TObject);

    > begin

    >

    > f_my_Messagehandle := RegisterWindowMessage('TelephoNeS');

    > end;

    >

    > procedure TForm1.WndProc(var wpMessage: TMessage);

    > var

    > DataStruct : TCopyDataStruct;

    > Data: TData;

    > begin

    > If (wpMessage.Msg = f_my_MessageHandle) Then

    > // (PCopyDataStruct(wpMessage.lParam)^.dwData = f_my_Messagehandle) Then

    > begin

    > CopyMemory(@data, PCopyDataStruct(wpMessage.lParam)^.lpData, SizeOf(TData));

    > wpMessage.Result := 1;

    >

    > If StrToInt(Copy(Data.s,1,1)) = 1 Then

    > Begin

    > memo1.lines.add(Copy(Data.s,1,Length(Data.s)-1));

    > End Else

    > If StrToInt(Copy(Data.s,1,1)) = 2 Then

    > Begin

    > memo2.lines.add(Copy(Data.s,1,Length(Data.s)-1));

    > End;

    > end

    > else

    > inherited WndProc(wpMessage);

    > end;