다음과 같은 Record 구조에서 digitString 이라는 변수가 문제가 됩니다..
digitString은 문자열이 올 수 있는데 정적배열로 선언시(digitString : array[0..9] of char)에는 무리 없이 돌아가지만..
문자열의 길이를 알 수 없기때문에 쓸 수 없습니다.. 반드시 동적배열로 선언해야 합니다.
예를 들면 '12345' 가 있다면.. digitString에는 '12345' 가 들어가게 되고 digitLen 에는 5byte가 들어가야 합니다.
그러나 아래와 같이 작성하면 가변형을 쓸 수 없다는 메세지와 함께 에러가 납니다.
lcs_req_type 은 type을 선택하는것이고.. type중 lcs_req_port_dial 은 총 60개가 올 수 있어서.. 정적배열로 선언했습니다..
lcs_req_port_dial Record안에는 아래와 같이 선언되며 안에 digitString의 동적배열이 존재합니다..
TLCS_REQ_PORT_DIAL = Record
slot : byte;
port : byte;
channel : byte; // reserved : 0
digitLen : byte;
digitString : array of char; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
end;
TLCS_REQ_CONF_ELEM = Record
elemId : DWORD;
elemValue : DWORD;
end;
TLCS_REQ_TYPE = Packed Record
case Integer of
0: (lcs_req_port_dial : array[0..59] of TLCS_REQ_PORT_DIAL);
1: (lcs_req_conf_elem : array[0..2] of TLCS_REQ_CONF_ELEM);
end;
TLCS_REQ_MSG_HD = Record
prim : Integer;
svcId : Integer;
elem : Integer;
lcs_req_type : TLCS_REQ_TYPE //
end;
digitString은 문자로 입력받아서.. Record 에 할당해서 String의 Size만큼을 Socket으로 전송해야 하는 구조 입니다..
어떤식으로 구현 해야 할지
조금 이라도 아시는분 답변 부탁드립니다.
말씀하시는 가변 길이 문자열 형은
string 을 쓰시면 됩니다.
그의 길이는 Length 를 사용하시면 되구요.
그럼~ 즐거운 프로그래밍 하시길~~