비쥬얼씨뿔의 콘솔어플리케이션으로 짠 프로그램과 델파이로 짠 프로그램간에
데이터를 주고 받을려고하는데(비쥬얼씨뿔에서는 주고 델파이에서 받고)
비쥬얼씨뿔책에서는 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;
이상하게 익스플로러가 실행이 되네요.
같은 핸들이 셋이라는 얘긴가요?
호야 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;