type
_ST_LOGIN = Record
room : char;
init : char;
tmp : array[0..6] of char;
end;
.
.
.
var
st_login,st : _ST_LOGIN;
V: Variant;
begin
st_login.room := 'M';
st_login.init := 'T';
VarClear(V);
TVarData(V).VType := varByRef;
TVarData(V).VPointer := @st_login;
.
.
.
이런식으로 Record를 변환해서 상대편(C++)에서 잘받습니다.
그런데 델파이쪽에서 다시 저런식으로 보낸 데이터를 레코드에
넣는것에 대한자료를 찾기가 힘들더군요...
누구 아시는분 조언좀 해주세요~
꼭 질문을 올리면 해결을 보는군요~ 자주 올려야 될듯~^^;;;
우선 이 코딩이 필요했던 이유는 VC로 소켓 컴포넌트를 만들었는데
데이터를 전달할때 구조체를 Variant로 만들어서 콤포넌트를 올린
넘한테 전달하기 때문에 패킷내용을 볼려면 요넘을 풀어야만 볼수
있었죠.. VB나 VC는 쉽게 레퍼런스를 구할수 있었지만..
델파이는 영... ^^;;
그래도 어케저케 아래의 코딩으로 해결 봤습니다~
procedure TFRM_Main.Client_SocketReceiveData(Sender: TObject;
SockNo: Smallint);
var
st_login : _ST_LOGIN;
buff : PCHAR;
V: Variant;
stmode : smallint;
begin
V := Client_Socket.GetRecvData;
buff := TVarData(V).VPointer; //<-C++에서 BYTE배열로 패킷을 만들었다
CopyMemory(@stmode,@buff[0],2);
if stmode = 101 then
begin
CopyMemory(@st_login,@buff[2],sizeof(_ST_LOGIN));
if st_login.init = 'C' then
begin
st_login.room := MONITORING;
Client_Socket.SetSendData(Client_Socket.GetMySocketNo,DF_LOGIN,VariantReturn(@st_login),sizeof(st_login));
end;
end;
end;
콤포넌트의 Recv이벤트 입니다(제가맹근부분)