도움좀 부탁합니다. ^^;
type
TSocketData = record
SocketID : TSocket; // 소켓
ReceivePacket : TIGW_Packet; // 데이터받을 버퍼
pHeader, pData : pointer; // 헤더와 데이터의 포인터
iDataLen : integer; // 받을 데이터의 길이
ExistData : boolean; // 다음 데이터 존재 여부
end;
var
FSockDataList : TList;
i : integer;
밑의 문장에서 i 에는 FSockDataList 의 현재 Index 값이 들어 가는건가요.
i := FSockDataList.Add(AllocMem(SizeOf(TSocketData)));
TSocketData(FSockDataList.Items[i]^).SocketID := SocketID;
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
type
TPackLen = array[1..4] of char; // 전문 Data 길이
TIGW_Header = packed record
cLength : TPackLen; // Header 제외 Data Packet 길이
cType : TPackNo; // Message Type (구분)
cDate : TPackDt;
cTime : TPackTm;
cErrCd : TErrCd;
end;
var
pSock : pointer;
TSocketData(pSock^).pHeader := @TSocketData(pSock^).ReceivePacket;
TSocketData(pSock^).iDataLen:=StrToIntDef(TIGW_Header(TSocketData(pSock^).pHeader^).cLength, 0);
TSocketData(pSock^).ReceivePacket; 에 들어있는 값
('0', '0', '0', '0', '1', '0', '0', '0', '2', '0', '0', '2', '0', '8', '2', '7', '1', '6', '1', '6', '2', '5', '0', '0', '0')
TSocketData(pSock^).iDataLen:=StrToIntDef(TIGW_Header(TSocketData(pSock^).pHeader^).cLength, 0);
위 문장에서 TSocketData(pSock^).pHeader^ 이부분은 이해가 가는데...
----------------------------------------------------------------------------------
아래 문장도 이해가 안갑니다.
----------------------------------------------------------------------------------
TIGW_Header(TSocketData(pSock^).pHeader^).cLength 이렇게 하면 여기에는 ('0', '0', '0', '0') 값이 들어가더라고요.
이게 어떻게 들어가는지 궁금합니다.
그리고 TSocketData(pSock^).pHeader 는 TIGW_Header를 가르키는데
TIGW_Header는 다음처럼 정의되어있으니까...
TIGW_Header = packed record
cLength : TPackLen; // Header 제외 Data Packet 길이
cType : TPackNo; // Message Type (구분)
cDate : TPackDt;
cTime : TPackTm;
cErrCd : TErrCd;
end;
cLength 는 TPackLen이고 TPackLen은 char 4byte이니까
TSocketData(pSock^).ReceivePacket 에 들어있는 값의 맨처음 4byte의 자료가 들어가겠죠.
TPackNo, TPackDt, TPackTm, TErrCd 에 대한 자료가 없어 정확히는 모르겠지만..
추측을 하면
cLength : '0000' /* 처음 4자리 */
cType : '1000 /* 5번째 부터 4자리로 추정됨*/
cDate : '20020827' /* 9번째 부터 8자리로 추정됨 */
cTime : '16162500' /* 17번째 부터 8자리로 추정됨 */
cErrCd : '0' /* 마지막 1자리 */
중요한것은 Record는 메모리의 연속된 공간을 차지하므로
define된 순서대로 자료가 들어가게 됩니다.
도움이 되셨기를....