자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi TValue에서 Tbytes의 데이터를 어떻게 뽑아낼수 있는지 문의 드립니다.
2019.10.24 18:08
델파이 10.0 (Seattle)을 사용하고 있습니다.
계산 영역에서 TBytes 데이터의 Array 데이터 값을 TValue에 저장하고
다른 유닛에서 해당 TValue에서 저장된 Array of TBytes값을 뽑아 내려 하면 어떻게 해야 할지요?
예를 들면, 하기와 같이
Tbytes1 : 30 31 32 33 34 35 36
TBytes2 : 41 42 43 44 45 46 47
TBytes3 : 51 52 53 54 55 56 57
...
의 Array of TBytes값을 TValue에 저장하였고 다른 유닛에서 TValue의 값을 하기와 조작하여도
Array of Bytes의 값을 값을 반환받을 수 없습니다.
Array of TBytes := TValue.AsType<TBytes> 또는
Array of TBytes:=TValue.AsType<TArray<TBytes> 또는
Array of TBytes := TValue.AsType<TList<TBytes>>
상기의 문제에 대한 해결 방법을 알려주시면 감사하겠습니다.
고수님의 좋은 조언 부탁드립니다.
감사합니다.
댓글 4
-
험프리
2019.10.25 15:43
-
한태수
2019.10.25 19:59
험프리님의 조언에 감사드립니다.
답글을 달아 주셨던 항목에서 Gurux.DLMS 의 델파이 소스 부분에 저장된 TValue 값을 험프리님께서
예로 들어 주셨던 V에 할당하여
B := V.AsType<TArrayOfTBytes>; 의 형식으로 실행시켰을 때
"E2531 Method 'AsType' Requires explicit type argument "의 오류가 발생하여 더이상 진행이 안됩니다.
또한
B := V.AsType<TArray<TBytes>>; 또는 B := V.AsType<TArray<TArray<Byte>>> ; 으로 진행하였을 때
System.Classes의 Line No. : 14303 에 위치한 하기의 항목에서 Exception 오류가 발생하여 더이상 진행이 되지 않습니다.
" if not SyncProc.Queued then
SyncProc.SyncRec.FSynchronizeException := AcquireExceptionObject "
델파이 7에서는 보지도 못했던 Tvalue라는 데이터 형 때문에 무지 고생하고 있습니다.
다른 해결방법도 있는지 문의 드립니다.
감사합니다.
한 태수 드림
-
험프리
2019.10.29 10:43
TValue 관련해서 다음 링크의 검색 결과를 참조해 이해해보시기 바랍니다.(제가 알고 있는 자료가 없어 검색 결과 안내 드립니다.)
-
한태수
2019.10.29 10:54
감사합니다.
Delphi TValue에서 Tbytes의 데이터를 어떻게 뽑아낼수 있는지 문의 드립니다.
2019.10.24 18:08
델파이 10.0 (Seattle)을 사용하고 있습니다.
계산 영역에서 TBytes 데이터의 Array 데이터 값을 TValue에 저장하고
다른 유닛에서 해당 TValue에서 저장된 Array of TBytes값을 뽑아 내려 하면 어떻게 해야 할지요?
예를 들면, 하기와 같이
Tbytes1 : 30 31 32 33 34 35 36
TBytes2 : 41 42 43 44 45 46 47
TBytes3 : 51 52 53 54 55 56 57
...
의 Array of TBytes값을 TValue에 저장하였고 다른 유닛에서 TValue의 값을 하기와 조작하여도
Array of Bytes의 값을 값을 반환받을 수 없습니다.
Array of TBytes := TValue.AsType<TBytes> 또는
Array of TBytes:=TValue.AsType<TArray<TBytes> 또는
Array of TBytes := TValue.AsType<TList<TBytes>>
상기의 문제에 대한 해결 방법을 알려주시면 감사하겠습니다.
고수님의 좋은 조언 부탁드립니다.
감사합니다.
댓글 4
-
험프리
2019.10.25 15:43
-
한태수
2019.10.25 19:59
험프리님의 조언에 감사드립니다.
답글을 달아 주셨던 항목에서 Gurux.DLMS 의 델파이 소스 부분에 저장된 TValue 값을 험프리님께서
예로 들어 주셨던 V에 할당하여
B := V.AsType<TArrayOfTBytes>; 의 형식으로 실행시켰을 때
"E2531 Method 'AsType' Requires explicit type argument "의 오류가 발생하여 더이상 진행이 안됩니다.
또한
B := V.AsType<TArray<TBytes>>; 또는 B := V.AsType<TArray<TArray<Byte>>> ; 으로 진행하였을 때
System.Classes의 Line No. : 14303 에 위치한 하기의 항목에서 Exception 오류가 발생하여 더이상 진행이 되지 않습니다.
" if not SyncProc.Queued then
SyncProc.SyncRec.FSynchronizeException := AcquireExceptionObject "델파이 7에서는 보지도 못했던 Tvalue라는 데이터 형 때문에 무지 고생하고 있습니다.
다른 해결방법도 있는지 문의 드립니다.
감사합니다.
한 태수 드림
-
험프리
2019.10.29 10:43
TValue 관련해서 다음 링크의 검색 결과를 참조해 이해해보시기 바랍니다.(제가 알고 있는 자료가 없어 검색 결과 안내 드립니다.)
-
한태수
2019.10.29 10:54
감사합니다.
원본데이터의 데이터 타입은 array of TBytes 입니다.
해당 데이터 타입은 다음과 같습니다.
TBytes = TArray<Byte>;
array of TByte = TArray<TBytes> = TArray<TArray<Byte>>;
TArray<T> = array of T // 제너릭 배열
위 관계만 이해하시면 될것 같습니다.
다음과 같이 샘플을 만들어 봤습니다.
type
// 아래 타입은 모두 같습니다.
// TArrayOfTBytes = TArray<TArray<Byte>>;
// TArrayOfTBytes = array of TArray<Byte>;
TArrayOfTBytes = TArray<TBytes>;
var
I: Integer;
A, B: TArray<TBytes>;
V: TValue;
begin
SetLength(A, 3);
A[0] := [30, 31, 32, 33, 34, 35, 36];
A[1] := [41, 42, 43, 44, 45, 46, 47];
A[2] := [51, 52, 53, 55, 55, 56, 57];
PrintArray(A);
V := TValue.From<TArrayOfTBytes>(A);
B := V.AsType<TArrayOfTBytes>;
// V := TValue.From<TArray<TBytes>>(A);
// B := V.AsType<TArray<TBytes>>;
PrintArray(B);
end;