type
TTr_Login = Packed record
Usid : array [0..7] of char;
Usnm : array [0..19] of char;
Pass : integer;
uscl : integer;
fill : array [0..5] of char;
end;
var
DataBuf : TCopyDataStruct;
Tr_Login : TTr_Login;
Temp : string;
SndMsg : string;
begin
Temp := 'abcd';
Move(Temp[1],Tr_Login.Usid,SizeOf(Tr_Login.Usid));
Temp := 'edfg';
Move(Temp[1],Tr_Login.Usnm,SizeOf(Tr_Login.Usnm));
Tr_Login.Pass := 500;
Tr_Login.uscl := 16000;
Temp := 'ab';
Move(Temp[1],Tr_Login.fill,SizeOf(Tr_Login.fill));
SetLength(SndMsg,SizeOf(Tr_Login));
Move(Tr_Login,SndMsg[1],SizeOf(Tr_Login));
with DataBuf do begin
DwData := 3;
cbData := Length(SndMsg);
lpData := @SndMsg[1];
end;
SendMessage(FindWindow(nil,'Receive String'),WM_COPYDATA,0,longint(@DataBuf));
델파이로 만든 프로그램에서 위와 같은 구조체를 VB로 된 프로그램으로
SendMessage던졌을 경우 char형은 이상이 없는데 integer형이 있는 경우
에는 자릿수가 깨져서 나옵니다.(델파이로 받으면 이상이 없이 나옵니다.)
vb에서 처리하는 부분 받은 데이타
Text1.Text = Mid(sString, 1, 8) abcd
Text2.Text = Mid(sString, 9, 20) edfg
Text3.Text = Mid(sString, 29, 4)
Text4.Text = Mid(sString, 33, 4)
Text5.Text = Mid(sString, 37, 6) b
integer형을 만난 다음 짤려서 나옵니다.
왜 그런가요 ?
그리고 델파이는 Move를 사용해서 integer형을 string으로 바꿀 수 있는데
VB는 어떻게 바꿔야 하나요 ?
VB 에서 String으로 받으면 integer형이 알수없는 문자가
되서 짤리고..
Byte형으로 받으면 그런 현상이 없네요.
Byte형은 Ansi형으로 받는다고 합니다..